c# - 每个频率的响度相等

标签 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;
    }
}

最佳答案

根据等响度曲线控制来自合成器的音频振幅可能不是您想要的。

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

关于c# - 每个频率的响度相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14115606/

相关文章:

c# - 自连接关系具有附加属性时的 NHibernate 映射

android - 使用软件合成器将MIDI文件转换为原始音频

Java字符串解析和通过MIDI合成器播放错误

c# - File.ReadAllLines 或 Stream Reader

c# - Linq to SQL to Linq 编译性能

c# - 在 RestSharp 中处理响应的最佳方式是什么?

c# - 使用 .NET 的 NAudio 如何删除 mp3 文件末尾的静音波?

c# - 使用 NAudio 通过网络发送 .Wav 文件

c# - 我怎样才能让 2 wavefilereader 按顺序播放?

alarm - 我如何生成类似于警铃的 Sox 合成声音