AnalyserNode:getByteFrequencyData() 方法
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015年7月.
AnalyserNode
介面的 getByteFrequencyData()
方法用於將當前的頻率資料複製到傳入的 Uint8Array
(無符號位元組陣列)中。
頻率資料由 0 到 255 範圍內的整數組成。
陣列中的每個項目代表特定頻率的分貝值。這些頻率從 0 線性分佈到取樣率的一半。例如,對於 48000
的取樣率,陣列的最後一個項目將代表 24000
Hz 的分貝值。
如果陣列的元素數量少於 AnalyserNode.frequencyBinCount
,多餘的元素將被丟棄。如果陣列的元素數量多於所需的數量,多餘的元素將被忽略。
語法
js
getByteFrequencyData(array)
參數
array
-
Uint8Array
,頻域資料將被複製到此陣列中。如果陣列的元素數量少於AnalyserNode.frequencyBinCount
,多餘的元素將被丟棄。如果陣列的元素數量多於所需的數量,多餘的元素將被忽略。
回傳值
無(undefined
)。
範例
以下範例展示了如何使用 AudioContext
建立一個 AnalyserNode
,然後使用 requestAnimationFrame
和 <canvas>
來反覆收集頻率資料並繪製「Winamp 柱狀圖風格」的當前音訊輸出。若需更完整的應用範例或資訊,請參考我們的 Voice-change-O-matic 範例(相關程式碼請參見 app.js 第 108–193 行)。
js
const audioCtx = new AudioContext();
const analyser = audioCtx.createAnalyser();
// …
analyser.fftSize = 256;
const bufferLength = analyser.frequencyBinCount;
console.log(bufferLength);
const dataArray = new Uint8Array(bufferLength);
canvasCtx.clearRect(0, 0, WIDTH, HEIGHT);
function draw() {
drawVisual = requestAnimationFrame(draw);
analyser.getByteFrequencyData(dataArray);
canvasCtx.fillStyle = "rgb(0 0 0)";
canvasCtx.fillRect(0, 0, WIDTH, HEIGHT);
const barWidth = (WIDTH / bufferLength) * 2.5;
let barHeight;
let x = 0;
for (let i = 0; i < bufferLength; i++) {
barHeight = dataArray[i];
canvasCtx.fillStyle = `rgb(${barHeight + 100} 50 50)`;
canvasCtx.fillRect(x, HEIGHT - barHeight / 2, barWidth, barHeight / 2);
x += barWidth + 1;
}
}
draw();
規範
Specification |
---|
Web Audio API> # dom-analysernode-getbytefrequencydata> |
瀏覽器相容性
Loading…