问题
我试图弄清楚这一点但无济于事 - 如何在两个频率之间连续改变音符的音高。
我正在使用与此类似的功能生成音频信号:
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
工作顺利,没有听得见的问题。谢谢!