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 Juli 2015.
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 imfrequencyArrayzu empfangen. Für jede Frequenz infrequencyArray, deren Wert außerhalb des Bereichs von 0,0 bissampleRate/2 liegt (wobeisampleRatedie Abtastrate desAudioContextist), 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-frequencyArrayzu empfangen. Für jede Frequenz infrequencyArray, deren Wert außerhalb des Bereichs von 0,0 bissampleRate/2 liegt (wobeisampleRatedie Abtastrate desAudioContextist), 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
Loading…