Web Audio Api使用Decibels

时间:2014-03-24 08:40:11

标签: html5 audio html5-audio web-audio

我希望了解如何使用Web Audio API中的分贝

这里我有一个连接到增益节点的音频缓冲区

var mybuffer = context.createBufferSource());
mybuffer.buffer = buffer; //an audio buffer

var gainNode=context.createGain();

mybuffer.connect(gainNode);
gainNode.connect(context.destination);

增益音量是从0(静音)到n的范围,其中1是默认音量,但据我所知,通常音频与这样的音域无关,音量以分贝(Db)为单位,操作在Db也是。

我已经在这个答案中读到了一些有趣的东西,但它完全符合我的需求: Is there a way get something like decibel levels from an audio file and transform that information into a json array?

我想知道如何确定音频节点的分贝,如何使用分贝编辑音量

1 个答案:

答案 0 :(得分:14)

分贝是一个有趣的野兽。如http://en.wikipedia.org/wiki/Decibel所述,分贝本身并不是音量的衡量标准 - 它们是衡量收益或关注度的指标。分贝数是两个功率量比率的10的对数的10倍。

可以从Web Audio API中的一个关键位置获得分贝 - RealtimeAnalyser的getFloatFrequencyData以分贝为单位返回每个频段的衰减浮点数组。它不是技术上的音量 - 但是它是从单位衰减(1),这是整个音量(-1到1)的频率中的正弦波。

增益控制当然通常以分贝表示,因为它们是比率的度量 - 在统一和音量旋钮设置之间。将统一性(0 dB,增益= 1)视为“与扬声器一样响亮”。

要以分贝表示增益,请记住增益为1(无衰减,无增益)等于0分贝 - 因为10 ^ 0 = 1.(实际上 - 这是因为10 ^(0/10)= 1。显然,零除以任何东西仍为零 - 但请记住,这些是DECI-bels,其中有十分之一。)前面提到的维基百科文章很好地解释了这一点。

要在两者之间进行转换 - 例如,当你有分贝时设置一个gain.value,并从gain.value获得分贝增益 - 你只需要使用公式

decibel_level = 20 * log10( gain.value );

又名

gain.value = Math.pow(10, (decibel_level / 20));

请注意,基本10日志在Javascript中稍微复杂一些,因为只能访问自然对数,而不是基数10对数 - 但是你可以通过

获得
function log10(x) {
    return Math.log(x)/Math.LN10;
}

(有一个Math.log10()方法,但它是实验性的,并未在所有浏览器中实现。)