| <!doctype html> |
| <html> |
| <head> |
| <title>Test k-rate AudioParams of BiquadFilterNode</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="/webaudio/resources/audit-util.js"></script> |
| <script src="/webaudio/resources/audit.js"></script> |
| <script src="automation-rate-testing.js"></script> |
| </head> |
| |
| <body> |
| <script> |
| let audit = Audit.createTaskRunner(); |
| |
| audit.define( |
| {task: 'BiquadFilter-0', label: 'Biquad k-rate AudioParams (all)'}, |
| (task, should) => { |
| // Arbitrary sample rate and duration. |
| let sampleRate = 8000; |
| let testDuration = 1; |
| let context = new OfflineAudioContext({ |
| numberOfChannels: 3, |
| sampleRate: sampleRate, |
| length: testDuration * sampleRate |
| }); |
| |
| doTest(context, should, { |
| nodeName: 'BiquadFilterNode', |
| nodeOptions: {type: 'lowpass'}, |
| prefix: 'All k-rate params', |
| // Set all AudioParams to k-rate |
| rateSettings: [ |
| {name: 'Q', value: 'k-rate'}, |
| {name: 'detune', value: 'k-rate'}, |
| {name: 'frequency', value: 'k-rate'}, |
| {name: 'gain', value: 'k-rate'}, |
| ], |
| // Automate just the frequency |
| automations: [{ |
| name: 'frequency', |
| methods: [ |
| {name: 'setValueAtTime', options: [350, 0]}, { |
| name: 'linearRampToValueAtTime', |
| options: [0, testDuration] |
| } |
| ] |
| }] |
| }).then(() => task.done()); |
| }); |
| |
| // Define a test where we verify that a k-rate audio param produces |
| // different results from an a-rate audio param for each of the audio |
| // params of a biquad. |
| // |
| // Each entry gives the name of the AudioParam, an initial value to be |
| // used with setValueAtTime, and a final value to be used with |
| // linearRampToValueAtTime. (See |doTest| for details as well.) |
| |
| [{name: 'Q', |
| initial: 1, |
| final: 10 |
| }, |
| {name: 'detune', |
| initial: 0, |
| final: 1200 |
| }, |
| {name: 'frequency', |
| initial: 350, |
| final: 0 |
| }, |
| {name: 'gain', |
| initial: 10, |
| final: 0 |
| }].forEach(paramProperty => { |
| audit.define('Biquad k-rate ' + paramProperty.name, (task, should) => { |
| // Arbitrary sample rate and duration. |
| let sampleRate = 8000; |
| let testDuration = 1; |
| let context = new OfflineAudioContext({ |
| numberOfChannels: 3, |
| sampleRate: sampleRate, |
| length: testDuration * sampleRate |
| }); |
| |
| doTest(context, should, { |
| nodeName: 'BiquadFilterNode', |
| nodeOptions: {type: 'peaking', Q: 1, gain: 10}, |
| prefix: `k-rate ${paramProperty.name}`, |
| // Just set the frequency to k-rate |
| rateSettings: [ |
| {name: paramProperty.name, value: 'k-rate'}, |
| ], |
| // Automate just the given AudioParam |
| automations: [{ |
| name: paramProperty.name, |
| methods: [ |
| {name: 'setValueAtTime', options: [paramProperty.initial, 0]}, { |
| name: 'linearRampToValueAtTime', |
| options: [paramProperty.final, testDuration] |
| } |
| ] |
| }] |
| }).then(() => task.done()); |
| }); |
| }); |
| |
| audit.run(); |
| </script> |
| </body> |
| </html> |