0

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

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

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);

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

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

4

2 回答 2

5

增益通常是指信号幅度的线性增加或减少。例如,您可以通过乘以 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);
于 2014-12-04T06:00:43.850 回答
1

我不允许发表评论,所以我必须将其发布为答案。试图澄清增益节点的行为:增益值 -1 不是胡说八道,也不是完全沉默。-1 表示波的输入/相位的幅度被反转。所以 jaket 关于它反转信号是正确的,但并不是说它没有用。这可以用于例如产生倒置的锯齿波(斜坡下降而不是斜坡上升)。

所以增益值为-1的增益节点是一个逆变器。值在 0 - 1 之间的增益节点是衰减器。值在 -1 - 0 之间的增益节点是衰减器。值大于 1 的增益节点可用作放大器、失真器等。值为 0 或 1 的增益节点可用作开/关开关。

完全静音的值为 0。

于 2016-04-22T18:51:32.587 回答