我正在使用以下函数生成正弦波以在我的音频应用程序中播放:
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);
}