This article needs a technical review. How you can help.
The getFrequencyResponse()
method of the BiquadFilterNode
interface takes the current filtering algorithm's settings and calculates the frequency response for frequencies specified in a specified array of frequencies.
The two output arrays, magResponseOutput
and phaseResponseOutput
, must be created before calling this method; they must be the same size as the array of input frequency values (frequencyArray
).
Syntax
BiquadFilterNode.getFrequencyResponse(frequencyArray, magResponseOutput, phaseResponseOutput);
Parameters
frequencyArray
- A
Float32Array
containing an array of frequencies, specified in Hertz, which you want to filter. magResponseOutput
- A
Float32Array
to receive the computed magnitudes of the freqency response for each frequency value in thefrequencyArray
. For any frequency infrequencyArray
whose value is outside the range 0.0 tosampleRate
/2 (wheresampleRate
is the sample rate of theAudioContext
), the corresponding value in this array isNaN
. These are unitless values. phaseResponseOutput
- A
Float32Array
to receive the computed phase response values in radians for each frequency value in the inputfrequencyArray
. For any frequency infrequencyArray
whose value is outside the range 0.0 tosampleRate
/2 (wheresampleRate
is the sample rate of theAudioContext
), the corresponding value in this array isNaN
.
Return value
Exceptions
InvalidAccessError
- The three arrays provided are not all of the same length.
Example
In the following example we are using a biquad filter on a media stream (for the full demo, see our stream-source-buffer demo live, or read the source.) As part of this demo, we get the frequency responses for this biquad filter, for five sample frequencies. We first create the Float32Array
s we need, one containing the input frequencies, and two to receive the output magnitude and phase values:
var myFrequencyArray = new Float32Array(5); myFrequencyArray[0] = 1000; myFrequencyArray[1] = 2000; myFrequencyArray[2] = 3000; myFrequencyArray[3] = 4000; myFrequencyArray[4] = 5000; var magResponseOutput = new Float32Array(5); var phaseResponseOutput = new Float32Array(5);
Next we create a <ul>
element in our HTML to contain our results, and grab a reference to it in our JavaScript:
<p>Biquad filter frequency response for: </p> <ul class="freq-response-output"> </ul>
var freqResponseOutput = document.querySelector('.freq-response-output');
Finally, after creating our biquad filter, we use getFrequencyResponse()
to generate the response data and put it in our arrays, then loop through each data set and output them in a human-readable list at the bottom of the page:
var biquadFilter = audioCtx.createBiquadFilter(); biquadFilter.type = "lowshelf"; biquadFilter.frequency.value = 1000; biquadFilter.gain.value = range.value; ... function calcFrequencyResponse() { biquadFilter.getFrequencyResponse(myFrequencyArray,magResponseOutput,phaseResponseOutput); for(i = 0; i <= myFrequencyArray.length-1;i++){ var listItem = document.createElement('li'); listItem.innerHTML = '<strong>' + myFrequencyArray[i] + 'Hz</strong>: Magnitude ' + magResponseOutput[i] + ', Phase ' + phaseResponseOutput[i] + ' radians.'; freqResponseOutput.appendChild(listItem); } } calcFrequencyResponse();
Specifications
Specification | Status | Comment |
---|---|---|
Web Audio API The definition of 'getFrequencyResponse()' in that specification. |
Working Draft |
Browser compatibility
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
---|---|---|---|---|---|
Basic support | 10.0webkit | 25.0 (25.0) | No support | 15.0webkit 22 (unprefixed) |
6.0webkit |
Feature | Android | Firefox Mobile (Gecko) | Firefox OS | IE Mobile | Opera Mobile | Safari Mobile | Chrome for Android |
---|---|---|---|---|---|---|---|
Basic support | ? | 26.0 | 1.2 | ? | ? | ? | 33.0 |