WPT
wpt / webaudio / the-audio-api / the-iirfilternode-interface / iirfilter-basic.html
Spec: Web Audio API ↗
Runs: Chrome 155.0.8041.0 (wpt@4a01b83e3, 2026-09-04) | Firefox 157.0a1 (wpt@e7122b73f, 2026-09-04) | Safari 251 preview (wpt@2c385f65e, 2026-09-04) | Ladybird 1.0-70fb3 (wpt@4a01b83e3, 2026-09-04) | Servo Servo 0.6 (wpt@7e3d005d7, 2026-09-03) | Blitz a50cb8971 (wpt@a95401e4e, 2026-09-03)
View on the Blitz WPT dashboard | Open test on wpt.live | wpt.fyi
| Chrome | Firefox | Safari | Ladybird | Servo | Blitz | |
|---|---|---|---|---|---|---|
| Total | 43/43 | 39/43 | 43/43 | 18/43 | 43/43 | NOT RUN |
| Subtest | Chrome | Firefox | Safari | Ladybird | Servo | Blitz |
|---|---|---|---|---|---|---|
| # AUDIT TASK RUNNER STARTED. | PASS | PASS | PASS | PASS | PASS | — |
| Executing "initialize" | PASS | PASS | PASS | PASS | PASS | — |
| Executing "existence" | PASS | PASS | PASS | PASS | PASS | — |
| Executing "parameters" | PASS | PASS | PASS | FAIL | PASS | — |
| Executing "exceptions-createIIRFilter" | PASS | PASS | PASS | PASS | PASS | — |
| Executing "exceptions-getFrequencyData" | PASS | PASS | PASS | FAIL | PASS | — |
| Audit report | PASS | PASS | PASS | PASS | PASS | — |
| > [initialize] | PASS | PASS | PASS | PASS | PASS | — |
| Initialize context for testing did not throw an exception. | PASS | PASS | PASS | PASS | PASS | — |
| < [initialize] All assertions passed. (total 1 assertions) | PASS | PASS | PASS | PASS | PASS | — |
| > [existence] | PASS | PASS | PASS | PASS | PASS | — |
| context.createIIRFilter does exist. | PASS | PASS | PASS | — | PASS | — |
| < [existence] All assertions passed. (total 1 assertions) | PASS | PASS | PASS | — | PASS | — |
| > [parameters] | PASS | PASS | PASS | PASS | PASS | — |
| numberOfInputs is equal to 1. | PASS | PASS | PASS | — | PASS | — |
| numberOfOutputs is equal to 1. | PASS | PASS | PASS | — | PASS | — |
| channelCountMode is equal to max. | PASS | PASS | PASS | — | PASS | — |
| channelInterpretation is equal to speakers. | PASS | PASS | PASS | — | PASS | — |
| < [parameters] All assertions passed. (total 4 assertions) | PASS | PASS | PASS | — | PASS | — |
| > [exceptions-createIIRFilter] | PASS | PASS | PASS | PASS | PASS | — |
| createIIRFilter() threw TypeError: "Failed to execute 'createIIRFilter' on 'BaseAudioContext': 2 arguments required, but only 0 present.". | PASS | — | — | — | — | — |
| createIIRFilter(new Float32Array(1)) threw TypeError: "Failed to execute 'createIIRFilter' on 'BaseAudioContext': 2 arguments required, but only 1 present.". | PASS | — | — | — | — | — |
| createIIRFilter(null, null) threw TypeError: "Failed to execute 'createIIRFilter' on 'BaseAudioContext': The provided value cannot be converted to a sequence.". | PASS | — | — | — | — | — |
| createIIRFilter([], []) threw NotSupportedError: "Failed to execute 'createIIRFilter' on 'BaseAudioContext': The number of feedback coefficients provided (0) is outside the range [1, 20].". | PASS | — | — | — | — | — |
| createIIRFilter([1], []) threw NotSupportedError: "Failed to execute 'createIIRFilter' on 'BaseAudioContext': The number of feedback coefficients provided (0) is outside the range [1, 20].". | PASS | — | — | — | — | — |
| createIIRFilter([], [1]) threw NotSupportedError: "Failed to execute 'createIIRFilter' on 'BaseAudioContext': The number of feedforward coefficients provided (0) is outside the range [1, 20].". | PASS | — | — | — | — | — |
| createIIRFilter(new Float32Array(20), new Float32Array(20)) did not throw an exception. | PASS | PASS | PASS | — | PASS | — |
| createIIRFilter(new Float32Array(21), [1]) threw NotSupportedError: "Failed to execute 'createIIRFilter' on 'BaseAudioContext': The number of feedforward coefficients provided (21) is outside the range [1, 20].". | PASS | — | — | — | — | — |
| createIIRFilter([1], new Float32Array(21)) threw NotSupportedError: "Failed to execute 'createIIRFilter' on 'BaseAudioContext': The number of feedback coefficients provided (21) is outside the range [1, 20].". | PASS | — | — | — | — | — |
| createIIRFilter([1], new Float32Array(2)) threw InvalidStateError: "Failed to execute 'createIIRFilter' on 'BaseAudioContext': First feedback coefficient cannot be zero.". | PASS | — | — | — | — | — |
| createIIRFilter(new Float32Array(10), [1]) threw InvalidStateError: "Failed to execute 'createIIRFilter' on 'BaseAudioContext': At least one feedforward coefficient must be non-zero.". | PASS | — | — | — | — | — |
| createIIRFilter([1], [1, NaN, Infinity]) threw TypeError: "Failed to execute 'createIIRFilter' on 'BaseAudioContext': The provided double value is non-finite.". | PASS | — | — | — | — | — |
| createIIRFilter([1, NaN, Infinity], [1]) threw TypeError: "Failed to execute 'createIIRFilter' on 'BaseAudioContext': The provided double value is non-finite.". | PASS | — | — | — | — | — |
| createIIRFilter([1, 'abc', []], [1]) threw TypeError: "Failed to execute 'createIIRFilter' on 'BaseAudioContext': The provided double value is non-finite.". | PASS | — | — | — | — | — |
| < [exceptions-createIIRFilter] All assertions passed. (total 14 assertions) | PASS | PASS | PASS | — | PASS | — |
| > [exceptions-getFrequencyData] | PASS | PASS | PASS | PASS | PASS | — |
| getFrequencyResponse(null, new Float32Array(1), new Float32Array(1)) threw TypeError: "Failed to execute 'getFrequencyResponse' on 'IIRFilterNode': parameter 1 is not of type 'Float32Array'.". | PASS | — | — | — | — | — |
| getFrequencyResponse(new Float32Array(1), null, new Float32Array(1)) threw TypeError: "Failed to execute 'getFrequencyResponse' on 'IIRFilterNode': parameter 2 is not of type 'Float32Array'.". | PASS | — | — | — | — | — |
| getFrequencyResponse(new Float32Array(1), new Float32Array(1), null) threw TypeError: "Failed to execute 'getFrequencyResponse' on 'IIRFilterNode': parameter 3 is not of type 'Float32Array'.". | PASS | — | — | — | — | — |
| getFrequencyResponse(new Float32Array(10), new Float32Array(1), new Float32Array(20)) threw InvalidAccessError: "Failed to execute 'getFrequencyResponse' on 'IIRFilterNode': The magResponse length provided (1) is outside the range [10, 10].". | PASS | — | — | — | — | — |
| getFrequencyResponse(new Float32Array(10), new Float32Array(20), new Float32Array(1)) threw InvalidAccessError: "Failed to execute 'getFrequencyResponse' on 'IIRFilterNode': The magResponse length provided (20) is outside the range [10, 10].". | PASS | — | — | — | — | — |
| < [exceptions-getFrequencyData] All assertions passed. (total 5 assertions) | PASS | — | PASS | — | PASS | — |
| # AUDIT TASK RUNNER FINISHED: 5 tasks ran successfully. | PASS | — | PASS | — | PASS | — |
| createIIRFilter() threw TypeError: "BaseAudioContext.createIIRFilter: At least 2 arguments required, but only 0 passed". | — | PASS | — | — | — | — |
| createIIRFilter(new Float32Array(1)) threw TypeError: "BaseAudioContext.createIIRFilter: At least 2 arguments required, but only 1 passed". | — | PASS | — | — | — | — |
| createIIRFilter(null, null) threw TypeError: "BaseAudioContext.createIIRFilter: Argument 1 can't be converted to a sequence.". | — | PASS | — | — | — | — |
| createIIRFilter([], []) threw NotSupportedError: "BaseAudioContext.createIIRFilter: "feedforward" length 0 is not in the range [1,20]". | — | PASS | — | — | — | — |
| createIIRFilter([1], []) threw NotSupportedError: "BaseAudioContext.createIIRFilter: "feedback" length 0 is not in the range [1,20]". | — | PASS | — | — | — | — |
| createIIRFilter([], [1]) threw NotSupportedError: "BaseAudioContext.createIIRFilter: "feedforward" length 0 is not in the range [1,20]". | — | PASS | — | — | — | — |
| createIIRFilter(new Float32Array(21), [1]) threw NotSupportedError: "BaseAudioContext.createIIRFilter: "feedforward" length 21 is not in the range [1,20]". | — | PASS | — | — | — | — |
| createIIRFilter([1], new Float32Array(21)) threw NotSupportedError: "BaseAudioContext.createIIRFilter: "feedback" length 21 is not in the range [1,20]". | — | PASS | — | — | — | — |
| createIIRFilter([1], new Float32Array(2)) threw InvalidStateError: "BaseAudioContext.createIIRFilter: First value in "feedback" must be nonzero". | — | PASS | — | — | — | — |
| createIIRFilter(new Float32Array(10), [1]) threw InvalidStateError: "BaseAudioContext.createIIRFilter: "feedforward" must contain some nonzero values". | — | PASS | — | — | — | — |
| createIIRFilter([1], [1, NaN, Infinity]) threw TypeError: "BaseAudioContext.createIIRFilter: Element of argument 2 is not a finite floating-point value.". | — | PASS | — | — | — | — |
| createIIRFilter([1, NaN, Infinity], [1]) threw TypeError: "BaseAudioContext.createIIRFilter: Element of argument 1 is not a finite floating-point value.". | — | PASS | — | — | — | — |
| createIIRFilter([1, 'abc', []], [1]) threw TypeError: "BaseAudioContext.createIIRFilter: Element of argument 1 is not a finite floating-point value.". | — | PASS | — | — | — | — |
| getFrequencyResponse(null, new Float32Array(1), new Float32Array(1)) threw TypeError: "IIRFilterNode.getFrequencyResponse: Argument 1 is not an object.". | — | PASS | — | — | — | — |
| getFrequencyResponse(new Float32Array(1), null, new Float32Array(1)) threw TypeError: "IIRFilterNode.getFrequencyResponse: Argument 2 is not an object.". | — | PASS | — | — | — | — |
| getFrequencyResponse(new Float32Array(1), new Float32Array(1), null) threw TypeError: "IIRFilterNode.getFrequencyResponse: Argument 3 is not an object.". | — | PASS | — | — | — | — |
| X getFrequencyResponse(new Float32Array(10), new Float32Array(1), new Float32Array(20)) did not throw an exception. | — | FAIL | — | — | — | — |
| X getFrequencyResponse(new Float32Array(10), new Float32Array(20), new Float32Array(1)) did not throw an exception. | — | FAIL | — | — | — | — |
| < [exceptions-getFrequencyData] 2 out of 5 assertions were failed. | — | FAIL | — | — | — | — |
| # AUDIT TASK RUNNER FINISHED: 1 out of 5 tasks were failed. | — | FAIL | — | — | — | — |
| createIIRFilter() threw TypeError: "Not enough arguments". | — | — | PASS | — | — | — |
| createIIRFilter(new Float32Array(1)) threw TypeError: "Not enough arguments". | — | — | PASS | — | — | — |
| createIIRFilter(null, null) threw TypeError: "Value is not a sequence". | — | — | PASS | — | — | — |
| createIIRFilter([], []) threw NotSupportedError: "feedforward array must have a length between 1 and 20". | — | — | PASS | — | — | — |
| createIIRFilter([1], []) threw NotSupportedError: "feedback array must have a length between 1 and 20". | — | — | PASS | — | — | — |
| createIIRFilter([], [1]) threw NotSupportedError: "feedforward array must have a length between 1 and 20". | — | — | PASS | — | — | — |
| createIIRFilter(new Float32Array(21), [1]) threw NotSupportedError: "feedforward array must have a length between 1 and 20". | — | — | PASS | — | — | — |
| createIIRFilter([1], new Float32Array(21)) threw NotSupportedError: "feedback array must have a length between 1 and 20". | — | — | PASS | — | — | — |
| createIIRFilter([1], new Float32Array(2)) threw InvalidStateError: "first value of feedback array cannot be zero". | — | — | PASS | — | — | — |
| createIIRFilter(new Float32Array(10), [1]) threw InvalidStateError: "feedforward array must contain a non-zero value". | — | — | PASS | — | — | — |
| createIIRFilter([1], [1, NaN, Infinity]) threw TypeError: "The provided value is non-finite". | — | — | PASS | — | — | — |
| createIIRFilter([1, NaN, Infinity], [1]) threw TypeError: "The provided value is non-finite". | — | — | PASS | — | — | — |
| createIIRFilter([1, 'abc', []], [1]) threw TypeError: "The provided value is non-finite". | — | — | PASS | — | — | — |
| getFrequencyResponse(null, new Float32Array(1), new Float32Array(1)) threw TypeError: "Argument 1 ('frequencyHz') to IIRFilterNode.getFrequencyResponse must be an instance of Float32Array". | — | — | PASS | — | — | — |
| getFrequencyResponse(new Float32Array(1), null, new Float32Array(1)) threw TypeError: "Argument 2 ('magResponse') to IIRFilterNode.getFrequencyResponse must be an instance of Float32Array". | — | — | PASS | — | — | — |
| getFrequencyResponse(new Float32Array(1), new Float32Array(1), null) threw TypeError: "Argument 3 ('phaseResponse') to IIRFilterNode.getFrequencyResponse must be an instance of Float32Array". | — | — | PASS | — | — | — |
| getFrequencyResponse(new Float32Array(10), new Float32Array(1), new Float32Array(20)) threw InvalidAccessError: "Arrays must have the same length". | — | — | PASS | — | — | — |
| getFrequencyResponse(new Float32Array(10), new Float32Array(20), new Float32Array(1)) threw InvalidAccessError: "Arrays must have the same length". | — | — | PASS | — | — | — |
| createIIRFilter() threw TypeError: "Not enough arguments to "BaseAudioContext.createIIRFilter".". | — | — | — | — | PASS | — |
| createIIRFilter(new Float32Array(1)) threw TypeError: "Not enough arguments to "BaseAudioContext.createIIRFilter".". | — | — | — | — | PASS | — |
| createIIRFilter(null, null) threw TypeError: "Value is not an object". | — | — | — | — | PASS | — |
| createIIRFilter([], []) threw NotSupportedError: "The operation is not supported.". | — | — | — | — | PASS | — |
| createIIRFilter([1], []) threw NotSupportedError: "The operation is not supported.". | — | — | — | — | PASS | — |
| createIIRFilter([], [1]) threw NotSupportedError: "The operation is not supported.". | — | — | — | — | PASS | — |
| createIIRFilter(new Float32Array(21), [1]) threw NotSupportedError: "The operation is not supported.". | — | — | — | — | PASS | — |
| createIIRFilter([1], new Float32Array(21)) threw NotSupportedError: "The operation is not supported.". | — | — | — | — | PASS | — |
| createIIRFilter([1], new Float32Array(2)) threw InvalidStateError: "The object is in an invalid state.". | — | — | — | — | PASS | — |
| createIIRFilter(new Float32Array(10), [1]) threw InvalidStateError: "The object is in an invalid state.". | — | — | — | — | PASS | — |
| createIIRFilter([1], [1, NaN, Infinity]) threw TypeError: "this argument is not a finite floating-point value". | — | — | — | — | PASS | — |
| createIIRFilter([1, NaN, Infinity], [1]) threw TypeError: "this argument is not a finite floating-point value". | — | — | — | — | PASS | — |
| createIIRFilter([1, 'abc', []], [1]) threw TypeError: "this argument is not a finite floating-point value". | — | — | — | — | PASS | — |
| getFrequencyResponse(null, new Float32Array(1), new Float32Array(1)) threw TypeError: "Value is not an object.". | — | — | — | — | PASS | — |
| getFrequencyResponse(new Float32Array(1), null, new Float32Array(1)) threw TypeError: "Value is not an object.". | — | — | — | — | PASS | — |
| getFrequencyResponse(new Float32Array(1), new Float32Array(1), null) threw TypeError: "Value is not an object.". | — | — | — | — | PASS | — |
| getFrequencyResponse(new Float32Array(10), new Float32Array(1), new Float32Array(20)) threw InvalidAccessError: "The object does not support the operation or argument.". | — | — | — | — | PASS | — |
| getFrequencyResponse(new Float32Array(10), new Float32Array(20), new Float32Array(1)) threw InvalidAccessError: "The object does not support the operation or argument.". | — | — | — | — | PASS | — |
| X context.createIIRFilter does not exist. Got undefined. | — | — | — | FAIL | — | — |
| < [existence] 1 out of 1 assertions were failed. | — | — | — | FAIL | — | — |
| createIIRFilter() threw TypeError: "undefined is not a function (evaluated from 'context.createIIRFilter')". | — | — | — | PASS | — | — |
| createIIRFilter(new Float32Array(1)) threw TypeError: "undefined is not a function (evaluated from 'context.createIIRFilter')". | — | — | — | PASS | — | — |
| createIIRFilter(null, null) threw TypeError: "undefined is not a function (evaluated from 'context.createIIRFilter')". | — | — | — | PASS | — | — |
| X createIIRFilter([], []) threw "TypeError" instead of NotSupportedError. | — | — | — | FAIL | — | — |
| X createIIRFilter([1], []) threw "TypeError" instead of NotSupportedError. | — | — | — | FAIL | — | — |
| X createIIRFilter([], [1]) threw "TypeError" instead of NotSupportedError. | — | — | — | FAIL | — | — |
| X createIIRFilter(new Float32Array(20), new Float32Array(20)) incorrectly threw TypeError: "undefined is not a function (evaluated from 'context.createIIRFilter')". | — | — | — | FAIL | — | — |
| X createIIRFilter(new Float32Array(21), [1]) threw "TypeError" instead of NotSupportedError. | — | — | — | FAIL | — | — |
| X createIIRFilter([1], new Float32Array(21)) threw "TypeError" instead of NotSupportedError. | — | — | — | FAIL | — | — |
| X createIIRFilter([1], new Float32Array(2)) threw "TypeError" instead of InvalidStateError. | — | — | — | FAIL | — | — |
| X createIIRFilter(new Float32Array(10), [1]) threw "TypeError" instead of InvalidStateError. | — | — | — | FAIL | — | — |
| createIIRFilter([1], [1, NaN, Infinity]) threw TypeError: "undefined is not a function (evaluated from 'context.createIIRFilter')". | — | — | — | PASS | — | — |
| createIIRFilter([1, NaN, Infinity], [1]) threw TypeError: "undefined is not a function (evaluated from 'context.createIIRFilter')". | — | — | — | PASS | — | — |
| createIIRFilter([1, 'abc', []], [1]) threw TypeError: "undefined is not a function (evaluated from 'context.createIIRFilter')". | — | — | — | PASS | — | — |
| < [exceptions-createIIRFilter] 8 out of 14 assertions were failed. | — | — | — | FAIL | — | — |
| # AUDIT TASK RUNNER FINISHED: 2 out of 5 tasks were failed. | — | — | — | FAIL | — | — |