| <!doctype html> |
| <meta charset=utf-8> |
| <title>Test the IIRFilterNode Interface</title> |
| <script src=/resources/testharness.js></script> |
| <script src=/resources/testharnessreport.js></script> |
| <script> |
| test(function(t) { |
| var ac = new AudioContext(); |
| |
| function check_args(arg1, arg2, err, desc) { |
| test(function() { |
| assert_throws_dom(err, function() { |
| ac.createIIRFilter(arg1, arg2) |
| }) |
| }, desc) |
| } |
| |
| check_args([], [1.0], 'NotSupportedError', |
| 'feedforward coefficients can not be empty'); |
| |
| check_args([1.0], [], 'NotSupportedError', |
| 'feedback coefficients can not be empty'); |
| |
| var coeff = new Float32Array(21) |
| coeff[0] = 1.0; |
| |
| check_args(coeff, [1.0], 'NotSupportedError', |
| 'more than 20 feedforward coefficients can not be used'); |
| |
| check_args([1.0], coeff, 'NotSupportedError', |
| 'more than 20 feedback coefficients can not be used'); |
| |
| check_args([0.0, 0.0], [1.0], 'InvalidStateError', |
| 'at least one feedforward coefficient must be non-zero'); |
| |
| check_args([0.5, 0.5], [0.0], 'InvalidStateError', |
| 'the first feedback coefficient must be non-zero'); |
| |
| }, "IIRFilterNode coefficients are checked properly"); |
| |
| test(function(t) { |
| var ac = new AudioContext(); |
| |
| var frequencies = new Float32Array([-1.0, ac.sampleRate*0.5 - 1.0, ac.sampleRate]); |
| var magResults = new Float32Array(3); |
| var phaseResults = new Float32Array(3); |
| |
| var filter = ac.createIIRFilter([0.5, 0.5], [1.0]); |
| filter.getFrequencyResponse(frequencies, magResults, phaseResults); |
| |
| assert_true(isNaN(magResults[0]), "Invalid input frequency should give NaN magnitude response"); |
| assert_true(!isNaN(magResults[1]), "Valid input frequency should not give NaN magnitude response"); |
| assert_true(isNaN(magResults[2]), "Invalid input frequency should give NaN magnitude response"); |
| assert_true(isNaN(phaseResults[0]), "Invalid input frequency should give NaN phase response"); |
| assert_true(!isNaN(phaseResults[1]), "Valid input frequency should not give NaN phase response"); |
| assert_true(isNaN(phaseResults[2]), "Invalid input frequency should give NaN phase response"); |
| |
| }, "IIRFilterNode getFrequencyResponse handles invalid frequencies properly"); |
| </script> |