我正在使用以下函数生成正弦波,以便在我的音频应用程序中播放:
public double NextSample(double frequency)
{
Math.Sin(2.0 * Math.PI * frequency * position++ / sampleRate);
}
其中'position'只是已请求的样本总数(因此'position'除以'sampleRate'代表当前时间)。
只要传递给它的频率保持不变,该函数就会产生预期的结果。但是,如果我尝试在频率之间进行扫描,结果很奇怪。我不能真正描述它,除了说频率在变化时,函数的输出听起来不像传递给它的频率。
任何人都能解释一下吗?
编辑:供将来参考,以下是解决方案:
public double NextSample(double frequency)
{
Math.Sin(phase += 2 * Math.PI * frequency / sampleRate);
}