我试图让它以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);
}
}