Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 每频率等响度_C#_Naudio_Synthesizer - Fatal编程技术网

C# 每频率等响度

C# 每频率等响度,c#,naudio,synthesizer,C#,Naudio,Synthesizer,所以我用NAudio从头开始用C#编写合成器。我已经让它播放不同的频率,这很酷,但我注意到高音明显比低音更响亮。是否由于这种影响: 或者当我产生正弦波时,我做错了什么?如果确实有必要,我将如何实现等响度轮廓曲线 谢谢 我的代码: NAudio期望一个由-1到+1范围内的浮点值填充的缓冲区来表示波形 生成正弦波: buffer[n + offset] = (float)(Amplitude * Math.Sin(angle)); angle = (angle + angleIncrement)

所以我用NAudio从头开始用C#编写合成器。我已经让它播放不同的频率,这很酷,但我注意到高音明显比低音更响亮。是否由于这种影响:

或者当我产生正弦波时,我做错了什么?如果确实有必要,我将如何实现等响度轮廓曲线

谢谢

我的代码:

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;
    }
}
设置频率:

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文件并通过真正的立体声播放它,听起来可能会更动听。