Hallo,
ich möchte Sinustöne erklingen lassen und nutze dazu SourceDataLine (line) wie folgt:
mit:
Doch es ist nach jeder Frequenzänderung ein störendes Knacken zu hören.
Woran liegt das und wie vermeidet man es ?
ich möchte Sinustöne erklingen lassen und nutze dazu SourceDataLine (line) wie folgt:
Java:
line.start();
final byte[] toneBuffer = new byte[SAMPLE_CHUNK];
while(run) {
createSineWaveBuffer(frequency, toneBuffer);
line.write(toneBuffer, 0, toneBuffer.length);
}
mit:
Java:
private double alpha = 0.0;
private static final double step_alpha = (2.0*Math.PI)/SAMPLE_RATE;
private void createSineWaveBuffer(final double freq, final byte[] buffer) {
for(int i = 0; i < buffer.length; ++i) {
buffer[i] = (byte)(Math.sin(freq*alpha)*127.0);
alpha += step_alpha;
if(alpha >= 2.0*Math.PI) {
alpha = 0.0;
}
}
}
Doch es ist nach jeder Frequenzänderung ein störendes Knacken zu hören.
Woran liegt das und wie vermeidet man es ?