Index: third_party/WebKit/LayoutTests/webaudio/Analyser/handle-silent-inputs.html |
diff --git a/third_party/WebKit/LayoutTests/webaudio/Analyser/handle-silent-inputs.html b/third_party/WebKit/LayoutTests/webaudio/Analyser/handle-silent-inputs.html |
index 596c3f559ab39784c62f63192f3e137bad8b5633..ffe4fe8822644803accabf657c648ebbdc7a9894 100644 |
--- a/third_party/WebKit/LayoutTests/webaudio/Analyser/handle-silent-inputs.html |
+++ b/third_party/WebKit/LayoutTests/webaudio/Analyser/handle-silent-inputs.html |
@@ -1,102 +1,106 @@ |
-<!doctype html> |
+<!DOCTYPE html> |
<html> |
<head> |
+ <title> |
+ Handle Silent Inputs to AnalyserNode |
+ </title> |
<script src="../../resources/testharness.js"></script> |
- <script src="../../resources/testharnessreport.js"></script> |
+ <script src="../../resources/testharnessreport.js"></script> |
<script src="../resources/audit-util.js"></script> |
<script src="../resources/audit.js"></script> |
- <title>Handle Silent Inputs to AnalyserNode</title> |
</head> |
- |
<body> |
- <script> |
+ <script id="layout-test-code"> |
let audit = Audit.createTaskRunner(); |
let sampleRate = 16000; |
let renderDuration = 1; |
let renderFrames = renderDuration * sampleRate; |
- audit.define({ |
- label: 'connected', |
- description: 'Test handling of silent inputs' |
- }, function (task, should) { |
- tester(should, false, '0').then(task.done.bind(task)); |
- }); |
- |
- audit.define({ |
- label: 'auto-pull', |
- description: 'Test handling of silent inputs' |
- }, function(task, should) { |
- tester(should, true, '1').then(task.done.bind(task)); |
- }); |
- |
- audit.define({ |
- label: 'timing', |
- description: 'Test shifting in of zeroes after source has stopped' |
- }, function(task, should) { |
- let renderQuantumFrames = 128; |
- |
- // sampleRate chosen to be a power of two so we don't have round-off |
- // errors in computing the times for when to suspend the context. |
- let context = new OfflineAudioContext(1, 16384, 16384); |
- let source = new ConstantSourceNode(context); |
- |
- // The fftSize for the analyser is fairly arbitrary, except the code |
- // assumes it is larger than 128. |
- let analyser = new AnalyserNode(context, {fftSize: 2048}); |
- |
- source.connect(analyser).connect(context.destination); |
- |
- source.start(); |
- |
- // Stop the source after 1 fftSize frames. |
- let time = analyser.fftSize / context.sampleRate; |
- source.stop(time); |
- |
- // Verify that the time data at this point is constant. |
- context.suspend(time) |
- .then(() => { |
- let data = new Float32Array(analyser.fftSize); |
- analyser.getFloatTimeDomainData(data); |
- should( |
- data, 'At time ' + context.currentTime + |
- ' Analyser frames [0, ' + analyser.fftSize + ')') |
- .beConstantValueOf(1); |
- }) |
- .then(context.resume.bind(context)); |
- |
- // After each rendering quantum from the point at which the source |
- // stopped, verify that zeroes are inserted into the time data one |
- // rendering quantum at a time. |
- |
- let limit = analyser.fftSize / renderQuantumFrames; |
- |
- for (let k = 1; k <= limit; ++k) { |
- let analyserTime = |
- (analyser.fftSize + k * renderQuantumFrames) / context.sampleRate; |
- context.suspend(analyserTime) |
- .then(() => { |
- let data = new Float32Array(analyser.fftSize); |
- let indexNewest = analyser.fftSize - k * renderQuantumFrames; |
- analyser.getFloatTimeDomainData(data); |
- if (k < limit) { |
+ audit.define( |
+ {label: 'connected', description: 'Test handling of silent inputs'}, |
+ function(task, should) { |
+ tester(should, false, '0').then(task.done.bind(task)); |
+ }); |
+ |
+ audit.define( |
+ {label: 'auto-pull', description: 'Test handling of silent inputs'}, |
+ function(task, should) { |
+ tester(should, true, '1').then(task.done.bind(task)); |
+ }); |
+ |
+ audit.define( |
+ { |
+ label: 'timing', |
+ description: 'Test shifting in of zeroes after source has stopped' |
+ }, |
+ function(task, should) { |
+ let renderQuantumFrames = 128; |
+ |
+ // sampleRate chosen to be a power of two so we don't have round-off |
+ // errors in computing the times for when to suspend the context. |
+ let context = new OfflineAudioContext(1, 16384, 16384); |
+ let source = new ConstantSourceNode(context); |
+ |
+ // The fftSize for the analyser is fairly arbitrary, except the code |
+ // assumes it is larger than 128. |
+ let analyser = new AnalyserNode(context, {fftSize: 2048}); |
+ |
+ source.connect(analyser).connect(context.destination); |
+ |
+ source.start(); |
+ |
+ // Stop the source after 1 fftSize frames. |
+ let time = analyser.fftSize / context.sampleRate; |
+ source.stop(time); |
+ |
+ // Verify that the time data at this point is constant. |
+ context.suspend(time) |
+ .then(() => { |
+ let data = new Float32Array(analyser.fftSize); |
+ analyser.getFloatTimeDomainData(data); |
should( |
- data.slice(0, indexNewest), 'At time ' + |
- context.currentTime + ' Analyser frames [0, ' + |
- indexNewest + ')') |
+ data, |
+ 'At time ' + context.currentTime + |
+ ' Analyser frames [0, ' + analyser.fftSize + ')') |
.beConstantValueOf(1); |
- } |
- should( |
- data.slice(indexNewest), 'At time ' + context.currentTime + |
- ' Analyser frames [' + indexNewest + ', ' + |
- analyser.fftSize + ')') |
- .beConstantValueOf(0); |
- }) |
- .then(context.resume.bind(context)); |
- } |
- |
- // Start the test |
- context.startRendering().then(() => task.done()); |
- }); |
+ }) |
+ .then(context.resume.bind(context)); |
+ |
+ // After each rendering quantum from the point at which the source |
+ // stopped, verify that zeroes are inserted into the time data one |
+ // rendering quantum at a time. |
+ |
+ let limit = analyser.fftSize / renderQuantumFrames; |
+ |
+ for (let k = 1; k <= limit; ++k) { |
+ let analyserTime = (analyser.fftSize + k * renderQuantumFrames) / |
+ context.sampleRate; |
+ context.suspend(analyserTime) |
+ .then(() => { |
+ let data = new Float32Array(analyser.fftSize); |
+ let indexNewest = |
+ analyser.fftSize - k * renderQuantumFrames; |
+ analyser.getFloatTimeDomainData(data); |
+ if (k < limit) { |
+ should( |
+ data.slice(0, indexNewest), |
+ 'At time ' + context.currentTime + |
+ ' Analyser frames [0, ' + indexNewest + ')') |
+ .beConstantValueOf(1); |
+ } |
+ should( |
+ data.slice(indexNewest), |
+ 'At time ' + context.currentTime + |
+ ' Analyser frames [' + indexNewest + ', ' + |
+ analyser.fftSize + ')') |
+ .beConstantValueOf(0); |
+ }) |
+ .then(context.resume.bind(context)); |
+ } |
+ |
+ // Start the test |
+ context.startRendering().then(() => task.done()); |
+ }); |
audit.run(); |
@@ -127,7 +131,9 @@ |
source.stop(stopTime); |
context.suspend(dataTime) |
- .then(() => { analyser.getFloatTimeDomainData(timeData); }) |
+ .then(() => { |
+ analyser.getFloatTimeDomainData(timeData); |
+ }) |
.then(context.resume.bind(context)); |
return context.startRendering().then(buffer => { |