AnalyserNode: метод getByteFrequencyData()
Базовая поддержка Широко распространённая
Эта функция хорошо отработана и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с апреля 2021 года.
Метод getByteFrequencyData() интерфейса AnalyserNode копирует текущие данные частоты в переданный Uint8Array (массив беззнаковых байтов).
Данные частоты состоят из целых чисел в диапазоне от 0 до 255.
Каждый элемент массива представляет собой значение децибел для определённой частоты. Частоты распределяются линейно от 0 до 1/2 частоты дискретизации. Например, для частоты дискретизации 48000 последний элемент массива будет представлять значение децибел для 24000 Гц.
Если массив содержит меньше элементов, чем AnalyserNode.frequencyBinCount, избыточные элементы отбрасываются. Если он содержит больше элементов, чем необходимо, избыточные элементы игнорируются.
Синтаксис
getByteFrequencyData(array)
Параметры
array-
Uint8Array, в который будут скопированы данные частотной области. Если массив содержит меньше элементов, чемAnalyserNode.frequencyBinCount, избыточные элементы отбрасываются. Если массив содержит больше элементов, чем необходимо, избыточные элементы игнорируются.
Возвращаемое значение
None (undefined).
Примеры
В следующем примере показано базовое использование AudioContext для создания AnalyserNode, а затем requestAnimationFrame и <canvas> для многократного сбора данных частоты и построения визуализации в стиле "графика Winamp" текущего аудиовхода. Для более полных примеров и информации смотрите демонстрацию Voice-change-O-matic (см. строки 108–193 в app.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();
Спецификации
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
getByteFrequencyData |
14 | 12 | 25 | 15 | 6 | 18 | 25 | 14 | 6 | 1.0 | 4.4.3 |
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/AnalyserNode/getByteFrequencyData