0

我正在使用以下函数生成正弦波以在我的音频应用程序中播放:

public double NextSample(double frequency)
{
    Math.Sin(2.0 * Math.PI * frequency * position++ / sampleRate);
}

其中'位置'只是已请求的样本总数(因此'位置'除以'sampleRate'代表当前时间)。

只要传递给它的频率保持不变,该函数就会产生预期的结果。但是,例如,如果我尝试在频率之间进行扫描,结果会很奇怪。我无法真正描述它,只能说当频率发生变化时,函数的输出听起来不像传递给它的频率。

谁能解释一下?

编辑:为了将来参考,这里是解决方案:

public double NextSample(double frequency)
{
    Math.Sin(phase += 2 * Math.PI * frequency / sampleRate);
}
4

0 回答 0