IIRFilterNode: getFrequencyResponse()-Methode
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 der IIRFilterNode
-Schnittstelle verwendet die aktuellen Einstellungen des Filteralgorithmus und berechnet die Frequenzantwort für Frequenzen, die in einem bestimmten Frequenzarray angegeben sind.
Die beiden Ausgabearrays, magResponseOutput
und phaseResponseOutput
, müssen vor dem Aufruf dieser Methode erstellt werden; sie müssen die gleiche Größe wie das Eingabefrequenzarray (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. phaseResponseOutput
-
Ein
Float32Array
, um die berechneten Phasenantwortwerte in Radiant für jeden Frequenzwert im EingabearrayfrequencyArray
zu empfangen.
Rückgabewert
Keiner (undefined
).
Ausnahmen
NotSupportedError
DOMException
-
Wird ausgelöst, wenn die drei bereitgestellten Arrays nicht alle die gleiche Länge haben.
Beispiele
Im folgenden Beispiel verwenden wir einen IIR-Filter auf einem Medienstream (für eine vollständige Demo siehe unser stream-source-buffer Demo live oder lesen Sie den Quellcode). Als Teil dieser Demo erhalten wir die Frequenzantworten für diesen IIR-Filter für fünf Beispiel-Frequenzen. Wir erstellen zuerst die benötigten Float32Array
-Objekte, eines mit den Eingabefrequenzen und zwei, um die Ausgaben der Magnituden- und Phasenwerte 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 holen eine Referenz darauf in unserem JavaScript:
<p>IIR filter frequency response for:</p>
<ul class="freq-response-output"></ul>
const freqResponseOutput = document.querySelector(".freq-response-output");
Schließlich, nach der Erstellung unseres Filters, verwenden wir getFrequencyResponse()
, um die Antwortdaten zu erzeugen und in unsere Arrays zu setzen, durchlaufen dann jedes Datenset und geben sie in einer leicht lesbaren Liste am unteren Rand der Seite aus:
const feedforwardCoefficients = [0.1, 0.2, 0.3, 0.4, 0.5];
const feedbackCoefficients = [0.5, 0.4, 0.3, 0.2, 0.1];
const iirFilter = audioCtx.createIIRFilter(
feedforwardCoefficients,
feedbackCoefficients,
);
// …
function calcFrequencyResponse() {
iirFilter.getFrequencyResponse(
myFrequencyArray,
magResponseOutput,
phaseResponseOutput,
);
for (let i = 0; i < myFrequencyArray.length; i++) {
const listItem = document.createElement("li");
listItem.textContent = `${myFrequencyArray[i]}Hz: Magnitude ${magResponseOutput[i]}, Phase ${phaseResponseOutput[i]} radians.`;
freqResponseOutput.appendChild(listItem);
}
}
calcFrequencyResponse();
Spezifikationen
Specification |
---|
Web Audio API # dom-iirfilternode-getfrequencyresponse |
Browser-Kompatibilität
BCD tables only load in the browser