| <!doctype html> |
| <html> |
| <head> |
| <title> |
| Console Warning for Unstable BiquadFilterNode |
| </title> |
| <script src="../../imported/w3c/web-platform-tests/resources/testharness.js"></script> |
| <script src="../../resources/testharnessreport.js"></script> |
| <script src="../resources/audit.js"></script> |
| </head> |
| |
| <body> |
| <script> |
| let audit = Audit.createTaskRunner({requireResultFile: true}); |
| |
| // Fairly arbitrary sample rate. If you change it, be sure to verify that |
| // the filter does produce non-finite values before 1 sec is up. |
| let sampleRate = 48000; |
| |
| audit.define( |
| {label: 'test', description: 'Console warning for unstable filter'}, |
| (task, should) => { |
| // The length depends on how fast the filter blows up. This seems |
| // to work. |
| let context = new OfflineAudioContext( |
| {length: sampleRate, sampleRate: sampleRate}); |
| |
| // Test consists of an oscillator feeding a biquad filter whose |
| // detune parameter is modulated by another oscillator. |
| let src = |
| new OscillatorNode(context, {type: 'sine', frequency: 80}); |
| let detuneMod = |
| new OscillatorNode(context, {type: 'sine', frequency: 1000}); |
| let modGain = new GainNode(context, {gain: 3000}); |
| let filter = new BiquadFilterNode(context, {frequency: 200}); |
| // Make sure filter detune automation is a-rate! |
| filter.detune.automationRate = 'a-rate'; |
| |
| detuneMod.connect(modGain).connect(filter.detune); |
| src.connect(filter).connect(context.destination); |
| |
| src.start(); |
| detuneMod.start(); |
| |
| context.startRendering() |
| .then(buffer => { |
| let output = buffer.getChannelData(0); |
| |
| // This test really requires an a-rate BiquadFilter. Print a |
| // simple message so we know. |
| should( |
| filter.detune.automationRate, |
| 'BiquadFilterNode.detune.automationRate') |
| .beEqualTo('a-rate'); |
| |
| // The output should have at least one non-finite value. |
| // (Don't care where or how many.) |
| let nonFiniteFound = false; |
| for (let k = 0; k < output.length; ++k) { |
| if (!isFinite(output[k])) { |
| nonFiniteFound = true; |
| break; |
| } |
| } |
| |
| should(nonFiniteFound, 'At least one non-Finite output value') |
| .beTrue(); |
| }) |
| .then(() => task.done()); |
| }); |
| |
| audit.run(); |
| </script> |
| </body> |
| </html> |