BiquadFilterNode: метод getFrequencyResponse()
Базовая Широкодоступная
Эта функция хорошо отработана и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с апреля 2021 года.
Метод getFrequencyResponse() интерфейса BiquadFilterNode принимает текущие настройки алгоритма фильтрации и рассчитывает частотную характеристику для частот, указанных в заданном массиве частот.
Два выходных массива, magResponseOutput и phaseResponseOutput, должны быть созданы перед вызовом этого метода; они должны иметь тот же размер, что и массив входных значений частоты (frequencyArray).
Синтаксис
getFrequencyResponse(frequencyArray, magResponseOutput, phaseResponseOutput)
Параметры
frequencyArray-
Массив
Float32Array, содержащий массив частот, указанных в Герцах, которые вы хотите отфильтровать. magResponseOutput-
Массив
Float32Arrayдля получения вычисленных значений амплитуды частотной характеристики для каждого значения частоты в массивеfrequencyArray. Для любой частоты вfrequencyArray, значение которой находится вне диапазона от 0,0 доsampleRate/2 (гдеsampleRate— частота дискретизацииAudioContext), соответствующее значение в этом массиве равноNaN. Эти значения без единиц измерения. phaseResponseOutput-
Массив
Float32Arrayдля получения вычисленных значений фазовой характеристики в радианах для каждого значения частоты во входном массивеfrequencyArray. Для любой частоты вfrequencyArray, значение которой находится вне диапазона от 0,0 доsampleRate/2 (гдеsampleRate— частота дискретизацииAudioContext), соответствующее значение в этом массиве равноNaN.
Возвращаемое значение
Ничего (undefined).
Исключения
InvalidAccessError-
Предоставленные три массива не имеют одинаковой длины.
Примеры
В следующем примере мы используем биквадратный фильтр для потока медиа (полную демонстрацию см. в нашем примере с потоком-буфером или исходном коде.) В рамках этой демонстрации мы получаем частотные характеристики этого биквадратного фильтра для пяти частот дискретизации. Сначала мы создаем необходимые массивы Float32Array, один для входных частот и два для получения выходных значений амплитуды и фазы:
const myFrequencyArray = new Float32Array(5); myFrequencyArray[0] = 1000; myFrequencyArray[1] = 2000; myFrequencyArray[2] = 3000; myFrequencyArray[3] = 4000; myFrequencyArray[4] = 5000; const magResponseOutput = new Float32Array(5); const phaseResponseOutput = new Float32Array(5);
Далее мы создаём элемент <ul> в нашем HTML для отображения результатов и получаем ссылку на него в нашем JavaScript:
<p>Biquad filter frequency response for:</p> <ul class="freq-response-output"></ul>
const freqResponseOutput = document.querySelector(".freq-response-output");
Наконец, после создания нашего биквадратного фильтра, мы используем getFrequencyResponse() для генерации данных отклика и помещаем их в наши массивы, затем перебираем каждый набор данных и выводим их в удобочитаемом списке в нижней части страницы:
const biquadFilter = audioCtx.createBiquadFilter();
biquadFilter.type = "lowshelf";
biquadFilter.frequency.value = 1000;
biquadFilter.gain.value = range.value;
// …
function calcFrequencyResponse() {
biquadFilter.getFrequencyResponse(
myFrequencyArray,
magResponseOutput,
phaseResponseOutput,
);
for (let i = 0; i <= myFrequencyArray.length - 1; i++) {
const listItem = document.createElement("li");
listItem.textContent = `: Magnitude ${magResponseOutput[i]}, Phase ${phaseResponseOutput[i]} radians.`;
listItem.insertBefore(
document.createElement("strong"),
listItem.firstChild,
).textContent = `${myFrequencyArray[i]}Hz`;
freqResponseOutput.appendChild(listItem);
}
}
calcFrequencyResponse();
Спецификации
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
getFrequencyResponse |
17 | 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/BiquadFilterNode/getFrequencyResponse