AnalyserNode: свойство fftSize
Базовая Широко поддерживается
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с апреля 2021 года.
Свойство fftSize интерфейса AnalyserNode — это значение типа unsigned long и представляет размер окна в выборках, используемый при выполнении быстрого преобразования Фурье (FFT) для получения данных частотной области.
Значение
Целое беззнаковое число, представляющее размер окна FFT, заданное в количестве выборок. Большее значение приведет к большей детализации в частотной области, но меньшей детализации в амплитудной области.
Должно быть степенью двойки от 25 до 215, то есть одним из: 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, и 32768. По умолчанию 2048.
Исключения
-
IndexSizeErrorDOMException -
Выбрасывается, если заданное значение не является степенью двойки или находится вне допустимого диапазона.
Примеры
В следующем примере показано базовое использование AudioContext для создания AnalyserNode, а затем requestAnimationFrame и <canvas> для многократного сбора данных временной области и отображения выходных данных в стиле "осциллографа" текущего аудиовхода. Более полные примеры/информация см. в нашем демо Voice-change-O-matic (см. строки 108–193 в app.js для соответствующего кода).
const audioCtx = new AudioContext();
const analyser = audioCtx.createAnalyser();
// …
analyser.fftSize = 2048;
const bufferLength = analyser.frequencyBinCount;
const dataArray = new Uint8Array(bufferLength);
analyser.getByteTimeDomainData(dataArray);
// draw an oscilloscope of the current audio source
function draw() {
drawVisual = requestAnimationFrame(draw);
analyser.getByteTimeDomainData(dataArray);
canvasCtx.fillStyle = "rgb(200 200 200)";
canvasCtx.fillRect(0, 0, WIDTH, HEIGHT);
canvasCtx.lineWidth = 2;
canvasCtx.strokeStyle = "rgb(0 0 0)";
canvasCtx.beginPath();
const sliceWidth = (WIDTH * 1.0) / bufferLength;
let x = 0;
for (let i = 0; i < bufferLength; i++) {
const v = dataArray[i] / 128.0;
const y = (v * HEIGHT) / 2;
if (i === 0) {
canvasCtx.moveTo(x, y);
} else {
canvasCtx.lineTo(x, y);
}
x += sliceWidth;
}
canvasCtx.lineTo(canvas.width, canvas.height / 2);
canvasCtx.stroke();
}
draw();
Спецификации
| Спецификация |
|---|
| Web Audio API # dom-analysernode-fftsize |
Совместимость с браузерами
| Десктопные | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
fftSize |
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/fftSize