Я пытаюсь заставить это играть синусоидальный сигнал на частоте 440 Гц.
Конструктор вызывается, и никаких ошибок не появляется.
generate () создает массив double
s для звуковых данных и отправляет его в process (), который создает массив byte
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);
}
}