diff options
Diffstat (limited to 'testing/web-platform/tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-tail.html')
-rw-r--r-- | testing/web-platform/tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-tail.html | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/testing/web-platform/tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-tail.html b/testing/web-platform/tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-tail.html new file mode 100644 index 0000000000..3141bf7ff3 --- /dev/null +++ b/testing/web-platform/tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-tail.html @@ -0,0 +1,71 @@ +<!DOCTYPE html> +<html> + <head> + <title> + Test Biquad Tail Output + </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> + </head> + <body> + <script id="layout-test-code"> + let audit = Audit.createTaskRunner(); + + // A high sample rate shows the issue more clearly. + let sampleRate = 192000; + // Some short duration because we don't need to run the test for very + // long. + let testDurationSec = 0.5; + let testDurationFrames = testDurationSec * sampleRate; + + // Amplitude experimentally determined to give a biquad output close to 1. + // (No attempt was made to produce exactly 1; it's not needed.) + let sourceAmplitude = 100; + + // The output of the biquad filter should not change by more than this + // much between output samples. Threshold was determined experimentally. + let glitchThreshold = 0.012968; + + // Test that a Biquad filter doesn't have it's output terminated because + // the input has gone away. Generally, when a source node is finished, it + // disconnects itself from any downstream nodes. This is the correct + // behavior. Nodes that have no inputs (disconnected) are generally + // assumed to output zeroes. This is also desired behavior. However, + // biquad filters have memory so they should not suddenly output zeroes + // when the input is disconnected. This test checks to see if the output + // doesn't suddenly change to zero. + audit.define( + {label: 'test', description: 'Biquad Tail Output'}, + function(task, should) { + let context = + new OfflineAudioContext(1, testDurationFrames, sampleRate); + + // Create an impulse source. + let buffer = context.createBuffer(1, 1, context.sampleRate); + buffer.getChannelData(0)[0] = sourceAmplitude; + let source = context.createBufferSource(); + source.buffer = buffer; + + // Create the biquad filter. It doesn't really matter what kind, so + // the default filter type and parameters is fine. Connect the + // source to it. + let biquad = context.createBiquadFilter(); + source.connect(biquad); + biquad.connect(context.destination); + + source.start(); + + context.startRendering().then(function(result) { + // There should be no large discontinuities in the output + should(result.getChannelData(0), 'Biquad output') + .notGlitch(glitchThreshold); + task.done(); + }) + }); + + audit.run(); + </script> + </body> +</html> |