问题
我试图解决这一问题无济于事-如何在两个频率之间连续更改音符的音高。
我正在生成具有以下功能的音频信号:
double SineGenerator(double time, double frequency)
{
return Math.Sin(frequency * time * 2 * Math.PI);
}
尽管我在此功能之外手动管理时间,例如:
time += 1.0 / sampleRate;
double sample = SineGenerator(time, frequency);
而且,在所需数量的样本上线性内插
frequency
参数的明显解决方案无法按预期工作。这样做时,声波会充满爆裂声和咔嗒声。我该如何实现呢?
解决方案(编辑)
多亏了geofftnzless,这很容易解决。我现在切换到使用此生成器:
double SineGenerator(ref double time, double frequency, int sampleRate)
{
return Math.Sin(time += (frequency * 2 * Math.PI) / sampleRate);
}
它负责在内部增加
time
。使用此生成器插值
frequency
可以顺利进行,并且不会出现听觉上的问题。谢谢! 最佳答案
不要用frequency
乘以time
,而是使用frequency
将time
增加适当的数量。这样time
是连续的,您将不会跳转。