我在Web Audio API的分析器節點上使用getByteFrequencyData
方法創建了一個getSpectrum
方法。返回的音頻數據陣列是相對於音頻源(el或音頻()實例)volume
(值爲0到1)。按照音量對getByteFrequencyData中的音頻數據進行規範化處理
使用音頻源的音量我試圖對接收到的每個值進行歸一化來自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;
的W3C spec引用用於計算給定maxDecibels和minDecibels返回值的公式的條紋版本。根據我的基本理解,我試圖反轉數學,所以我得到了一個標準化的值,但我無法完全正確地工作。我遇到了麻煩,只是從0到1的音量值。
任何煽動將不勝感激!這裏有一個working example的問題。更改音量滑塊將說明問題。
更新7/22/16:感謝@ raymond-toy的回答,我想出瞭如何將0音量值轉換爲1音量值爲分貝。
volumeDB = Math.abs((Math.log(volume)/Math.LN10)*20);
獲得DB後,我倒公式中的W3C規範,
value = ((audioDataValue * volumeDB)/255) - volumeDB
不幸的是,value
相對於volume
不知何故仍然結束。有沒有人看到我失蹤?
你可以解決這個問題。 destination'。然後,您將有一個音量滑塊來調整GainNode而不是音頻的音量。這種方式只有在通過「分析器」後才能調整音量。 – idbehold
對於我正在處理的內容,我無法控制音量的設置,所以我無法將GainNode放在任何可能的位置。這是一個好主意。會考慮用於其他項目 –