我写了一个小方波发生器。每当我尝试平稳地改变频率时,声音中总会清晰地听到“阶跃”。我很确定我没有看到一个很明显的解决方案:(

码:

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电平。

09-05 03:30