我已经在Web Audio API的Analyzer节点上getSpectrum
使用该getByteFrequencyData
方法创建了一个方法.返回的音频数据数组相对于音频源(el或Audio()实例)volume
,值为0到1.
使用音频源的音量我试图规范化从getByteFrequencyData接收的每个值,以便getSpectrum的用户在可视化音频数据时不必担心音量.
这是getSpectrum的条纹版本
var audioData = new Uint8Array(analyser.binCount);
var spectrum = [];
analyser.getByteFrequencyData(audioData);
for (var i = 0; i < audioData.length; i++) {
var value = audioData[i];
//Where I'm trying to calculate the value independent of volume
value = ((value / audioEl.volume) / 255);
spectrum.push(value);
}
return spectrum;
Run Code Online (Sandbox Code Playgroud)
在W3C规范引用用于计算给定maxDecibels和minDecibels返回值的公式.基于我的基本理解,我试图反转数学,所以我得到一个标准化值,但我不能让它正常工作.只是从0到1的音量值我无法完成此操作.
任何煽动都将不胜感激!这是该问题的一个实例.更改音量滑块将说明问题.
更新7/22/16:感谢@ raymond-toy的回答,我想出了如何将0到1的音量值转换为分贝.
volumeDB = Math.abs((Math.log(volume)/Math.LN10)*20);
Run Code Online (Sandbox Code Playgroud)
获得数据库后,我在W3C规范中反转了等式,
value = ((audioDataValue * volumeDB) / 255) - volumeDB
Run Code Online (Sandbox Code Playgroud)
不幸的是,value …