Chromium Code Reviews| Index: third_party/WebKit/LayoutTests/webaudio/Gain/gain.html |
| diff --git a/third_party/WebKit/LayoutTests/webaudio/Gain/gain.html b/third_party/WebKit/LayoutTests/webaudio/Gain/gain.html |
| index 0a6c2b8f568885e7a9b60158c31f58a5f6838db1..76773f3527924c94194b3d9df972e27d85913684 100644 |
| --- a/third_party/WebKit/LayoutTests/webaudio/Gain/gain.html |
| +++ b/third_party/WebKit/LayoutTests/webaudio/Gain/gain.html |
| @@ -8,77 +8,105 @@ The 11th note will be of gain 0.0, so it should be silent (at the end in the ren |
| <html> |
| <head> |
| +<script src="../../resources/testharness.js"></script> |
| +<script src="../../resources/testharnessreport.js"></script> |
| <script src="../resources/audit-util.js"></script> |
| -<script src="../resources/audio-testing.js"></script> |
| - |
| +<script src="../resources/audit.js"></script> |
| +<script src="../resources/buffer-loader.js"></script> |
| </head> |
| <body> |
| <script> |
| +let audit = Audit.createTaskRunner(); |
| -window.onload = init; |
| - |
| -var sampleRate = 44100.0; |
| -var bufferDurationSeconds = 0.125; |
| -var numberOfNotes = 11; |
| -var noteSpacing = bufferDurationSeconds + 0.020; // leave 20ms of silence between each "note" |
| -var lengthInSeconds = numberOfNotes * noteSpacing; |
| +let sampleRate = 44100.0; |
| +let bufferDurationSeconds = 0.125; |
| +let numberOfNotes = 11; |
| +let noteSpacing = |
| + bufferDurationSeconds + 0.020; // leave 20ms of silence between each "note" |
| +let lengthInSeconds = numberOfNotes * noteSpacing; |
| -var context = 0; |
| -var sinWaveBuffer = 0; |
| +let context = 0; |
| +let sinWaveBuffer = 0; |
| +let reference = 0; |
| function createSinWaveBuffer(lengthInSeconds, frequency) { |
| - var audioBuffer = context.createBuffer(2, lengthInSeconds * sampleRate, sampleRate); |
| + let audioBuffer = |
| + context.createBuffer(2, lengthInSeconds * sampleRate, sampleRate); |
| - var n = audioBuffer.length; |
| - var channelL = audioBuffer.getChannelData(0); |
| - var channelR = audioBuffer.getChannelData(1); |
| + let n = audioBuffer.length; |
| + let channelL = audioBuffer.getChannelData(0); |
| + let channelR = audioBuffer.getChannelData(1); |
| - for (var i = 0; i < n; ++i) { |
| - channelL[i] = Math.sin(frequency * 2.0*Math.PI * i / sampleRate); |
| - channelR[i] = channelL[i]; |
| - } |
| + for (let i = 0; i < n; ++i) { |
| + channelL[i] = Math.sin(frequency * 2.0 * Math.PI * i / sampleRate); |
| + channelR[i] = channelL[i]; |
| + } |
| - return audioBuffer; |
| + return audioBuffer; |
| } |
| function playNote(time, gain) { |
| - var source = context.createBufferSource(); |
| - source.buffer = sinWaveBuffer; |
| - |
| - var gainNode = context.createGain(); |
| - gainNode.gain.value = gain; |
| - |
| - source.connect(gainNode); |
| - gainNode.connect(context.destination); |
| - |
| - source.start(time); |
| -} |
| - |
| -function init() { |
| - if (!window.testRunner) |
| - return; |
| - |
| - // Create offline audio context. |
| - context = new OfflineAudioContext(2, sampleRate * lengthInSeconds, sampleRate); |
| - |
| - // Create a buffer for a short "note". |
| - sinWaveBuffer = createSinWaveBuffer(bufferDurationSeconds, 880.0); |
| + let source = context.createBufferSource(); |
| + source.buffer = sinWaveBuffer; |
| - // Render 11 notes, starting at a gain of 1.0, decreasing in gain by 0.1. |
| - // The last note will be of gain 0.0, so shouldn't be perceptible in the rendered output. |
| - for (var i = 0; i < numberOfNotes; ++i) { |
| - var time = i * noteSpacing; |
| - var gain = 1.0 - i / (numberOfNotes - 1); |
| - playNote(time, gain); |
| - } |
| + let gainNode = context.createGain(); |
| + gainNode.gain.value = gain; |
| - context.oncomplete = finishAudioTest; |
| - context.startRendering(); |
| + source.connect(gainNode); |
| + gainNode.connect(context.destination); |
| - testRunner.waitUntilDone(); |
| + source.start(time); |
| } |
| +audit.define('create context', function(task, should) { |
| + task.describe('Create context for test'); |
| + // Create offline audio context. |
| + context = |
| + new OfflineAudioContext(2, sampleRate * lengthInSeconds, sampleRate); |
| + task.done(); |
| +}); |
| + |
| +audit.define('load-ref', function(task, should) { |
| + task.describe('Load reference audio file'); |
| + let bufferLoader = |
| + new BufferLoader(context, ['gain-expected.wav'], bufferList => { |
| + reference = bufferList[0].getChannelData(0); |
| + task.done(); |
| + }); |
| + |
| + bufferLoader.load(); |
| +}); |
| + |
| +audit.define('test', function(task, should) { |
| + task.describe('GainNode functionality'); |
| + |
| + // Create a buffer for a short "note". |
| + sinWaveBuffer = createSinWaveBuffer(bufferDurationSeconds, 880.0); |
| + |
| + // Render 11 notes, starting at a gain of 1.0, decreasing in gain by 0.1. |
| + // The last note will be of gain 0.0, so shouldn't be perceptible in the |
| + // rendered output. |
| + for (let i = 0; i < numberOfNotes; ++i) { |
| + let time = i * noteSpacing; |
| + let gain = 1.0 - i / (numberOfNotes - 1); |
| + playNote(time, gain); |
| + } |
| + |
| + context.startRendering() |
| + .then(buffer => { |
| + let actual = buffer.getChannelData(0); |
| + should(actual, 'Output from gain node').beCloseToArray(reference, { |
| + absoluteThreshold: 3.0503e-5 |
| + }); |
| + let snr = 10 * Math.log10(computeSNR(actual, reference)); |
| + should(snr, 'SNR (in dB)').beGreaterThanOrEqualTo(89.088); |
| + }) |
| + .then(task.done.bind(task)); |
|
hongchan
2017/02/06 17:34:28
task => task.done()
|
| + ; |
| +}); |
| + |
| +audit.run(); |
| </script> |
| </body> |