| <!DOCTYPE html> |
| <html> |
| |
| <head> |
| <script src="../resources/js-test.js"></script> |
| <script src="resources/compatibility.js"></script> |
| <script src="resources/audio-testing.js"></script> |
| <script src="resources/audiobuffersource-testing.js"></script> |
| <script src="resources/buffer-loader.js"></script> |
| </head> |
| |
| <body> |
| <script> |
| description('AudioBufferSourceNode: oscillator-driven playbackRate modulation.'); |
| window.jsTestIsAsync = true; |
| |
| var sampleRate = 44100; |
| var duration = 0.25; |
| |
| var context = new OfflineAudioContext(1, sampleRate * duration, sampleRate); |
| var referenceBuffer; |
| |
| var audit = Audit.createTaskRunner(); |
| |
| // Task: Load the reference file asynchronously. In order to create a new |
| // reference file, use the task 'generate-reference' below. |
| audit.defineTask('load-reference', function (done) { |
| var loader = new BufferLoader(context, [ |
| 'audiobuffersource-playbackrate-modulation-expected.wav' |
| ], function (bufferList) { |
| referenceBuffer = bufferList[0]; |
| done(); |
| }); |
| |
| loader.load(); |
| }); |
| |
| |
| // Task: Render the actual buffer and compare with the reference. |
| audit.defineTask('generate-verify', function (done) { |
| |
| // With this setting, the playback rate will be changing continuously and |
| // repeatedly within the range of [0, 200] around 100Hz, based on the |
| // input from the oscillator. |
| createSawtoothWithModulation(context, 'playbackRate', 100, 100); |
| |
| context.startRendering().then(function (renderedBuffer) { |
| var actual = renderedBuffer.getChannelData(0); |
| var expected = referenceBuffer.getChannelData(0); |
| |
| // Compare two buffers with arbitrary (yet reasonable) constraints. |
| // There parameters are determined by try bot experiments. |
| compareBuffersWithConstraints(actual, expected, { |
| thresholdSNR: 92.72, |
| thresholdDiffULP: 0.985, |
| thresholdDiffCount: 0, |
| bitDepth: 16 |
| }); |
| |
| }).then(done); |
| }); |
| |
| // Task: Create a new reference audio file. See .runTasks() below to run |
| // this task. |
| audit.defineTask('generate-reference', function (done) { |
| if (!window.testRunner) { |
| done(); |
| return; |
| } |
| |
| // With this setting, the playback rate will be changing continuously and |
| // repeatedly within the range of [0, 200] around 100Hz, based on the |
| // input from the oscillator. |
| createSawtoothWithModulation(context, 'playbackRate', 100, 100); |
| |
| // |finishAudioTest| will automatically create a reference audio file from |
| // the OAC rendering if the reference file does not exist. |
| context.oncomplete = finishAudioTest; |
| context.startRendering(); |
| testRunner.waitUntilDone(); |
| |
| done(); |
| }); |
| |
| audit.defineTask('finish', function (done) { |
| finishJSTest(); |
| done(); |
| }); |
| |
| window.onload = function () { |
| audit.runTasks( |
| 'load-reference', |
| 'generate-verify', |
| 'finish' |
| ); |
| }; |
| |
| // Use this task to generate a new reference audio file. Make sure to |
| // comment out .runTasks() above before use this. |
| // audit.runTasks('generate-reference'); |
| |
| successfullyParsed = true; |
| </script> |
| </body> |
| |
| </html> |