BiquadFilterNode: Methode getFrequencyResponse()
Baseline
Weitgehend verfügbar
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Juli 2015 browserübergreifend verfügbar.
Die Methode getFrequencyResponse() der Schnittstelle BiquadFilterNode verwendet die aktuellen Einstellungen des Filteralgorithmus und berechnet den Frequenzgang für die Frequenzen, die in einem Array angegeben sind.
Die beiden Ausgabearrays magResponseOutput und phaseResponseOutput müssen vor dem Aufruf dieser Methode erstellt werden. Sie müssen dieselbe Länge wie das Array der Eingabefrequenzen (frequencyArray) haben.
Syntax
getFrequencyResponse(frequencyArray, magResponseOutput, phaseResponseOutput)
Parameter
frequencyArray-
Ein
Float32Arraymit den Frequenzen in Hertz, für die Sie den Frequenzgang berechnen möchten. magResponseOutput-
Ein
Float32Array, das die berechneten Amplitudenwerte des Frequenzgangs für jede Frequenz infrequencyArrayaufnimmt. Für jede Frequenz infrequencyArray, deren Wert außerhalb des Bereichs von 0.0 bissampleRate/2 liegt (wobeisampleRatedie Abtastrate desAudioContextist), lautet der entsprechende Wert in diesem ArrayNaN. Die Werte sind einheitenlos. phaseResponseOutput-
Ein
Float32Array, das die berechneten Phasenwerte in Radiant für jede Frequenz im EingabearrayfrequencyArrayaufnimmt. Für jede Frequenz infrequencyArray, deren Wert außerhalb des Bereichs von 0.0 bissampleRate/2 liegt (wobeisampleRatedie Abtastrate desAudioContextist), lautet der entsprechende Wert in diesem ArrayNaN.
Rückgabewert
Keiner (undefined).
Ausnahmen
InvalidAccessErrorDOMException-
Die drei übergebenen Arrays haben nicht alle dieselbe Länge.
Beispiele
Im folgenden Beispiel verwenden wir einen Biquad-Filter für einen Medienstrom. (Die vollständige Demo können Sie sich als stream-source-buffer-Demo ansehen oder den Quellcode lesen.) Im Rahmen dieser Demo ermitteln wir den Frequenzgang des Biquad-Filters für fünf Beispielfrequenzen. Zuerst erstellen wir die benötigten Float32Array-Arrays: eines mit den Eingabefrequenzen und zwei für die Amplituden- und Phasenwerte der Ausgabe:
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);
Anschließend erstellen wir in unserem HTML ein <ul>-Element für die Ergebnisse und rufen in unserem JavaScript eine Referenz darauf ab:
<p>Biquad filter frequency response for:</p>
<ul class="freq-response-output"></ul>
const freqResponseOutput = document.querySelector(".freq-response-output");
Nachdem wir den Biquad-Filter erstellt haben, verwenden wir schließlich getFrequencyResponse(), um die Frequenzgangdaten zu berechnen und in den Arrays zu speichern. Danach durchlaufen wir die Datensätze und geben sie am unteren Seitenrand als lesbare Liste aus:
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();
Spezifikationen
| Spezifikation |
|---|
| Web Audio API> # dom-biquadfilternode-getfrequencyresponse> |