Mik*_*ike 11 audio html5 html5-audio web-audio-api
我想了解如何在Web Audio API中使用分贝
这里我有一个连接到增益节点的音频缓冲区
var mybuffer = context.createBufferSource());
mybuffer.buffer = buffer; //an audio buffer
var gainNode=context.createGain();
mybuffer.connect(gainNode);
gainNode.connect(context.destination);
Run Code Online (Sandbox Code Playgroud)
增益音量是从0(静音)到n的范围,其中1是默认音量,但据我所知,音频通常与这样的音域无关,音量以分贝(Db)为单位,操作也以Db为单位.
我已经在这个答案中读到了一些有趣的东西,但它完全符合我的需求: 是否有办法从音频文件中获取分贝级别并将该信息转换为json数组?
我想知道如何确定音频节点的分贝,如何使用分贝编辑音量
cwi*_*lso 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获得分贝增益 - 你只需要使用公式
decibel_level = 20 * log10( gain.value );
Run Code Online (Sandbox Code Playgroud)
又名
gain.value = Math.pow(10, (decibel_level / 20));
Run Code Online (Sandbox Code Playgroud)
请注意,基本10日志在Javascript中稍微复杂一些,因为只能访问自然对数,而不是基数10对数 - 但是你可以通过
function log10(x) {
return Math.log(x)/Math.LN10;
}
Run Code Online (Sandbox Code Playgroud)
(有一个Math.log10()方法,但它是实验性的,并未在所有浏览器中实现.)
| 归档时间: |
|
| 查看次数: |
4512 次 |
| 最近记录: |