mis*_*nic 0 html javascript math audio audiocontext
我正在使用 AudioContext() 进行听力测试,我想知道如何将音量提高/降低 x dB。甚至有可能吗?
目前,我有一个 GainNode 连接到我的 AudioContext,它看起来(简而言之)如下:
var context = new AudioContext(), gainNode;
context.decodeAudioData(req.target.response, function(buffer) {
gainNode = context.createGain();
...
}
Run Code Online (Sandbox Code Playgroud)
要更改音量,我这样做:
gainNode.gain.value = {-1 to 1}
Run Code Online (Sandbox Code Playgroud)
在这里,我没有机会准确定义 dB 值。还有其他方法吗?
我认为问题是,浏览器永远不知道扬声器发出的声音的确切音量,因此没有计算新的 dB 音量的基础。
确定当前 dB 值的一种方法是通过 2 个声音的差异,例如测试声音(白噪声)和语音数字。为了计算差异,我找到了公式:
20 * Math.log10(gainNoise / gainSpeech);
Run Code Online (Sandbox Code Playgroud)
然后我有一个基数,例如 -6 dB,当语音是 -0.6 并且噪音是 -0.3 时。但是如何将这个值提高一个特定的 dB 值?
示例:我将 -6 dB 提高 5 dB 至 -1 dB。如何重新计算语音/噪音?
增益通常是指信号幅度的线性增加或减少。例如,您可以通过乘以 2 将信号的幅度加倍,而无需考虑原始信号电平。同样,您可以通过乘以 0.5 将信号减半。在数字中,增益是通过将输入信号的每个样本乘以所需比率来应用的。增益同样适用于信号和噪声。
你的问题暗示增益的范围是 -1 到 1。我已经阅读了文档,但找不到任何证明是这种情况的证据。我怀疑它更像是 0 到 N。-1 的增益是无意义的,因为它只会产生反转信号的效果。0 到 1 的增益范围只会让您降低增益。
通常的做法是用 dB 来谈论增益。在比率增益和以 dB 为单位的增益之间有一个简单的转换。
dB = 20 * log10(ratio)
ratio = 10^(dB/20)
Run Code Online (Sandbox Code Playgroud)
要从以 dB 为单位的值设置增益,您只需应用转换为比率。
dBgain = 20;
gainNode.gain.value = 10^(dBgain/20);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1545 次 |
| 最近记录: |