AudioContext:增加音量x分贝

时间:2014-12-03 11:21:29

标签: javascript html5 math audio audiocontext

我正在使用AudioContext()进行听力测试,我想知道如何将音量提高/降低x dB。它甚至可能吗?

目前,我有一个连接到我的AudioContext的gainNode,看起来像这样(简而言之):

var context = new AudioContext(), gainNode;
context.decodeAudioData(req.target.response, function(buffer) {
    gainNode = context.createGain();
    ...
}

要更改音量,请执行以下操作:

gainNode.gain.value = {-1 to 1}

在这里,我没有机会准确定义dB值。 还有其他方法吗?

我认为问题是,浏览器从不知道扬声器发出的声音的确切音量,因此无法计算新的dB音量。

确定当前dB值的方法是通过2种声音的差异,例如测试声音(白噪声)和口述数字。为了计算差异,我找到了公式:

20 * Math.log10(gainNoise / gainSpeech);

然后我有一个基础,例如当语音为-0.6且噪声为-0.3时,为-6 dB。 但是如何将此值提高一定的dB值?

示例:我将-6 dB提高5 dB至-1 dB。如何重新计算语音/噪音?

2 个答案:

答案 0 :(得分:4)

增益通常是指信号幅度的线性增加或减少。例如,您可以通过乘以2将信号的幅度加倍,而不考虑原始信号电平。同样,您可以通过乘以0.5将信号减半。在数字中,通过将输入信号的每个样本乘以期望的比率来应用增益。增益同样适用于信号和噪声。

您的问题意味着获得的范围为-1到1.我已阅读文档,但无法找到任何证据。我怀疑它更像是0到N.增益-1将是无意义的,因为它只会产生反转信号的效果。增益范围0到1只能降低增益。

通常的做法是以dB为单位谈论增益。比率增益和增益之间有一个简单的转换,以dB为单位。

dB = 20 * log10(ratio)
ratio = 10^(dB/20)

要以dB为单位设置增益,您只需将转换应用于比率。

dBgain = 20;
gainNode.gain.value = 10^(dBgain/20);

答案 1 :(得分:1)

我不允许发表评论所以我必须将此作为答案发布。 试图弄清楚增益节点的行为:增益值为​​-1不是无意义,也不是完全沉默。 -1表示波的输入/相位的幅度被反转。所以jaket关于它反转信号是正确的,但并不是没有用。这可以用于例如制作倒锯齿波(斜降而不是斜坡)。

因此增益值为-1的增益节点是变频器。 值为0-1的gainnode是衰减器。 值为-1-0的gainnode是Attenuverter。 值大于1的增益节点可用作放大器,失真器等。 值为0或1的gainnode可用作开/关开关。

完全沉默的值为0.