C# 每频率等响度
所以我用NAudio从头开始用C#编写合成器。我已经让它播放不同的频率,这很酷,但我注意到高音明显比低音更响亮。是否由于这种影响: 或者当我产生正弦波时,我做错了什么?如果确实有必要,我将如何实现等响度轮廓曲线 谢谢 我的代码: NAudio期望一个由-1到+1范围内的浮点值填充的缓冲区来表示波形 生成正弦波:C# 每频率等响度,c#,naudio,synthesizer,C#,Naudio,Synthesizer,所以我用NAudio从头开始用C#编写合成器。我已经让它播放不同的频率,这很酷,但我注意到高音明显比低音更响亮。是否由于这种影响: 或者当我产生正弦波时,我做错了什么?如果确实有必要,我将如何实现等响度轮廓曲线 谢谢 我的代码: NAudio期望一个由-1到+1范围内的浮点值填充的缓冲区来表示波形 生成正弦波: buffer[n + offset] = (float)(Amplitude * Math.Sin(angle)); angle = (angle + angleIncrement)
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;
}
}
设置频率:
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),以便选择合适的轮廓。在实践中,一个更大的问题是,当您将合成器扩展到使用复杂波形而不仅仅是纯音时,可能会通过滤波器等进行处理。等响度轮廓基于纯音,并且当您生成复杂信号时(即包含多个频率)相反,您需要一个响度模型来估计合成声音的响度。您的代码看起来正常(只要
振幅
是常数)。振幅
表示用户想要播放音符的音量。现在在我的测试中它是恒定的。在这种情况下,你认为我需要实现一个响度轮廓吗/我已经发布了:“人耳不是那样工作的,它是高度非线性的。”图表左侧的刻度是对数的,3dB等于2的因数。你是通过PC扬声器播放的吗?他们的低音唱得不太好。如果你保存了一个MP3文件并通过真正的立体声播放它,听起来可能会更动听。