1
我試圖讓這個在440赫茲發揮正弦波。 構造函數被調用,並且不出現錯誤。 產生()使得double
S爲聲音數據的數組,並將其發送到處理(),這使得其嘗試通過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);
}
}
謝謝,它現在的作品! – milo 2011-12-26 00:41:03