因此,我正在使用NAudio在C#中从头开始编写合成器。我得到了不同频率的演奏,这很酷,但是我注意到较高的音调明显比较低的音调大。是由于这种效果:
http://en.wikipedia.org/wiki/Equal-loudness_contour
还是在生成正弦波时我做错了什么?如果确实需要,我将如何实现等响度轮廓曲线?
谢谢
我的代码:
NAudio期望缓冲区中填充有介于-1到+1范围内的浮点值以表示波形。
产生正弦波:
buffer[n + offset] = (float)(Amplitude * Math.Sin(angle));
angle = (angle + angleIncrement) % (2 * Math.PI);
设定频率:
public double Frequency
{
set
{
angleIncrement = 2 * Math.PI * value / sampleRate;
}
get
{
return angleIncrement * sampleRate / 2 / Math.PI;
}
}
最佳答案
基于等响度轮廓控制合成器的音频幅度可能不是您想要的。
从理论上讲,您需要知道扬声器产生的绝对电平(SPL),以便选择合适的轮廓。实际上,更大的问题是当您扩展合成器以使用复杂的波形而不是仅由滤波器等处理的纯音时。等响度等高线基于纯音,并且当您生成复杂信号时(即包含许多频率),您将需要一个响度模型来估计合成声音的响度。
关于c# - 每个频率的响度相等,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14115606/