BiquadFilterNode: Methode getFrequencyResponse()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since April 2021.
Die getFrequencyResponse()
-Methode des BiquadFilterNode
-Interfaces nimmt die Einstellungen des aktuellen Filteralgorithmus und berechnet die Frequenzantwort für die in einem angegebenen Frequenzarray spezifizierten Frequenzen.
Die beiden Ausgabearrays, magResponseOutput
und phaseResponseOutput
, müssen erstellt werden, bevor diese Methode aufgerufen wird; sie müssen die gleiche Größe wie das Array der Eingabefrequenzwerte (frequencyArray
) haben.
Syntax
getFrequencyResponse(frequencyArray, magResponseOutput, phaseResponseOutput)
Parameter
frequencyArray
-
Ein
Float32Array
, das ein Array von Frequenzen in Hertz enthält, die gefiltert werden sollen. magResponseOutput
-
Ein
Float32Array
, um die berechneten Magnituden der Frequenzantwort für jeden Frequenzwert imfrequencyArray
zu empfangen. Für jede Frequenz infrequencyArray
, deren Wert außerhalb des Bereichs von 0,0 bissampleRate
/2 liegt (wobeisampleRate
die Abtastrate desAudioContext
ist), ist der entsprechende Wert in diesem ArrayNaN
. Diese sind einheitslose Werte. phaseResponseOutput
-
Ein
Float32Array
, um die berechneten Phasenantwortwerte in Radiant für jeden Frequenzwert im Eingabe-frequencyArray
zu empfangen. Für jede Frequenz infrequencyArray
, deren Wert außerhalb des Bereichs von 0,0 bissampleRate
/2 liegt (wobeisampleRate
die Abtastrate desAudioContext
ist), ist der entsprechende Wert in diesem ArrayNaN
.
Rückgabewert
Keiner (undefined
).
Ausnahmen
InvalidAccessError
-
Die bereitgestellten drei Arrays haben nicht alle die gleiche Länge.
Beispiele
Im folgenden Beispiel verwenden wir einen Biquad-Filter auf einem Medienstream (für die vollständige Demo, siehe unsere stream-source-buffer demo live oder lesen Sie den Quellcode.). Im Rahmen dieser Demo erhalten wir die Frequenzantworten für diesen Biquad-Filter für fünf Beispiel-Frequenzen. Zuerst erstellen wir die benötigten Float32Array
, eines das die Eingabefrequenzen enthält, und zwei, um die Ausgabe von Magnituden- und Phasenwerten zu empfangen:
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);
Als nächstes erstellen wir ein <ul>
-Element in unserem HTML, um unsere Ergebnisse zu enthalten und eine Referenz dazu in unserem JavaScript:
<p>Biquad filter frequency response for:</p>
<ul class="freq-response-output"></ul>
const freqResponseOutput = document.querySelector(".freq-response-output");
Schließlich, nachdem wir unseren Biquad-Filter erstellt haben, verwenden wir getFrequencyResponse()
, um die Antwortdaten zu generieren und in unsere Arrays zu platzieren. Dann durchlaufen wir jeden Datensatz und geben ihn in einer verständlichen Liste am unteren Ende der Seite 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
Specification |
---|
Web Audio API # dom-biquadfilternode-getfrequencyresponse |
Browser-Kompatibilität
BCD tables only load in the browser