为什么这段代码不播放任何声音?

时间:2011-12-26 00:32:22

标签: java audio javasound sine

我试图让它以440赫兹的速度发挥正弦波。 调用构造函数,不会出现错误。 generate()为声音数据创建一个double的数组,并将其发送到process(),这会产生一个byte的数组,试图通过Clip

由于

public class Synth {

AudioFormat format;

public Synth(){
    format=new AudioFormat(44100, 1, 1, true, false);
    try{
    generate(0.5);
    }catch(Exception e){e.printStackTrace();}
}

public void process(double[] data) throws Exception{ //range -1 to +1
    Clip clip=AudioSystem.getClip();

    byte[] bdata=new byte[data.length];
    for(int i=0; i<data.length; i++){
        bdata[i]=(byte)(data[i]*127);
    }

    AudioInputStream a=new AudioInputStream(new ByteArrayInputStream(bdata), format,bdata.length);

    clip.open(a);
}

public void generate(double seconds)throws Exception{
    float samplerate=format.getSampleRate();

    double[] data=new double[(int)(seconds*samplerate)];
    int f=440;

    for(int i=0; i<data.length; i++){
        data[i]=Math.sin(f*((double)(i)/samplerate)*2*Math.PI);
    }

    process(data);
}
}

1 个答案:

答案 0 :(得分:4)

尝试拨打Clip.loop(int)(或DataLine.start() - 由[{1}}执行)。