我写了一个小方波发生器。每当我尝试平稳地改变频率时,声音中总会清晰地听到“阶跃”。我很确定我没有看到一个很明显的解决方案:(
码:
double rate = 44100;
byte[] buffer;
AudioFormat audioFormat;
buffer = new byte[1];
audioFormat = new AudioFormat((float) rate, 8, 1, true, false);
SourceDataLine sourceDataLine = AudioSystem.getSourceDataLine(audioFormat);
sourceDataLine.open(audioFormat);
sourceDataLine.start();
int i = 0;
boolean on = false;
while (!t.isInterrupted())
{
i++;
if (i < rate / frequency)
{
i++;
} else
{
i = 0;
on = !on;
}
if (on)
buffer[0] = (byte) (volume / 2);
else
buffer[0] = (byte) (-volume / 2);
sourceDataLine.write(buffer, 0, 1);
}
sourceDataLine.drain();
sourceDataLine.stop();
sourceDataLine.close();
最佳答案
这可能是因为您仅使用8位样本大小。这仅给您256个声音级别,不足以进行平滑的更改。使用16位样本获得64k电平。