每个频率的相等响度

时间:2013-01-02 00:29:46

标签: c# naudio synthesizer

所以我使用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;
    }
}

2 个答案:

答案 0 :(得分:1)

根据等响度等高线控制合成器音频的幅度可能你想要的。

理论上,您需要知道扬声器产生的绝对水平(SPL),以便选择合适的轮廓。在实践中,更大的问题是当您将合成器扩展为使用复杂波形而不仅仅是纯音时,可能由滤波器等处理。等响度轮廓基于纯音,并且当您生成复杂信号时(即包含许多信号)您需要一个响度模型来估计合成声音的响度。

答案 1 :(得分:0)

您可能想要使用A加权。它不是量化响度的最准确方法,但它没问题。为了做得更好,你必须深入了解声学。更多here