| <!DOCTYPE html> |
| <html> |
| <head> |
| <title> |
| Test webm Decoding |
| </title> |
| <script src="../../../resources/testharness.js"></script> |
| <script src="../../../resources/testharnessreport.js"></script> |
| <script src="../../resources/audit-util.js"></script> |
| <script src="../../resources/audit.js"></script> |
| <script src="../../resources/buffer-loader.js"></script> |
| <script src="../../resources/audio-file-utils.js"></script> |
| </head> |
| <body> |
| <script id="layout-test-code"> |
| let audit = Audit.createTaskRunner(); |
| let decodedAudio; |
| let expectedAudio; |
| |
| audit.define( |
| {label: 'test', description: 'Test webm decoding'}, |
| function(task, should) { |
| |
| // Set the sample rate to match to encoded rate in the reference |
| // files, which is 48 kHz, to eliminate any resampling from |
| // decodeAudioData. |
| let context = new AudioContext({sampleRate: 48000}); |
| |
| let bufferLoader = new BufferLoader( |
| context, ['resources/webm-decode-expected.wav', 'test-webm.webm'], |
| function(bufferList) { |
| expectedAudio = bufferList[0]; |
| decodedAudio = bufferList[1]; |
| |
| // Just for information |
| should(context.sampleRate, 'context.sampleRate') |
| .beEqualTo(context.sampleRate); |
| |
| // Verify that we have the right number of channels and |
| // frames. |
| should(decodedAudio.numberOfChannels, 'Number of channels') |
| .beEqualTo(expectedAudio.numberOfChannels); |
| should(decodedAudio.length, 'Decoded number of frames') |
| .beEqualTo(expectedAudio.length); |
| |
| // Verify that the actual data matches the expected data very |
| // closely. |
| for (let c = 0; c < expectedAudio.numberOfChannels; ++c) { |
| let snrdB = 10 * |
| Math.log10(computeSNR( |
| decodedAudio.getChannelData(c), |
| expectedAudio.getChannelData(c))); |
| should(snrdB, 'SNR between actual expected channel ' + c) |
| .beGreaterThanOrEqualTo(110.97); |
| should( |
| decodedAudio.getChannelData(c), 'Decoded channel ' + c) |
| .beCloseToArray( |
| expectedAudio.getChannelData(c), |
| {absoluteThreshold: 4.0234e-5}); |
| } |
| let filename = 'resources/webm-decode-actual.wav'; |
| if (downloadAudioBuffer(decodedAudio, filename)) |
| should(true, 'Saved reference file').message(filename, ''); |
| task.done(); |
| }); |
| |
| bufferLoader.load(); |
| }); |
| |
| audit.run(); |
| </script> |
| </body> |
| </html> |