| Index: third_party/WebKit/LayoutTests/webaudio/AudioBufferSource/audiobuffersource-start.html
|
| diff --git a/third_party/WebKit/LayoutTests/webaudio/AudioBufferSource/audiobuffersource-start.html b/third_party/WebKit/LayoutTests/webaudio/AudioBufferSource/audiobuffersource-start.html
|
| index e369af1f71f17f6bab2b5e607eb710ed3db55611..8975268ff1f38b5814207f1f3d352521a4fa03ea 100644
|
| --- a/third_party/WebKit/LayoutTests/webaudio/AudioBufferSource/audiobuffersource-start.html
|
| +++ b/third_party/WebKit/LayoutTests/webaudio/AudioBufferSource/audiobuffersource-start.html
|
| @@ -1,105 +1,174 @@
|
| <!DOCTYPE html>
|
| -
|
| <html>
|
| -<head>
|
| -<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/audiobuffersource-testing.js"></script>
|
| -</head>
|
| -
|
| -<body>
|
| -
|
| -<script>
|
| -let audit = Audit.createTaskRunner();
|
| -
|
| -// The following test cases assume an AudioBuffer of length 8 whose PCM data is a linear ramp, 0, 1, 2, 3,...
|
| -
|
| -let tests = [
|
| -
|
| -{ description: "start(when): implicitly play whole buffer from beginning to end",
|
| - offsetFrame: "none", durationFrames: "none", renderFrames: 16, playbackRate: 1, expected: [0,1,2,3,4,5,6,7,0,0,0,0,0,0,0,0] },
|
| -
|
| -{ description: "start(when, 0): play whole buffer from beginning to end explicitly giving offset of 0",
|
| - offsetFrame: 0, durationFrames: "none", renderFrames: 16, playbackRate: 1, expected: [0,1,2,3,4,5,6,7,0,0,0,0,0,0,0,0] },
|
| -
|
| -{ description: "start(when, 0, 8_frames): play whole buffer from beginning to end explicitly giving offset of 0 and duration of 8 frames",
|
| - offsetFrame: 0, durationFrames: 8, renderFrames: 16, playbackRate: 1, expected: [0,1,2,3,4,5,6,7,0,0,0,0,0,0,0,0] },
|
| -
|
| -{ description: "start(when, 4_frames): play with explicit non-zero offset",
|
| - offsetFrame: 4, durationFrames: "none", renderFrames: 16, playbackRate: 1, expected: [4,5,6,7,0,0,0,0,0,0,0,0,0,0,0,0] },
|
| -
|
| -{ description: "start(when, 4_frames, 4_frames): play with explicit non-zero offset and duration",
|
| - offsetFrame: 4, durationFrames: 4, renderFrames: 16, playbackRate: 1, expected: [4,5,6,7,0,0,0,0,0,0,0,0,0,0,0,0] },
|
| -
|
| -{ description: "start(when, 7_frames): play with explicit non-zero offset near end of buffer",
|
| - offsetFrame: 7, durationFrames: 1, renderFrames: 16, playbackRate: 1, expected: [7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] },
|
| -
|
| -{ description: "start(when, 8_frames): play with explicit offset at end of buffer",
|
| - offsetFrame: 8, durationFrames: 0, renderFrames: 16, playbackRate: 1, expected: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] },
|
| -
|
| -{ description: "start(when, 9_frames): play with explicit offset past end of buffer",
|
| - offsetFrame: 8, durationFrames: 0, renderFrames: 16, playbackRate: 1, expected: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] },
|
| -
|
| -// When the duration exceeds the buffer, just play to the end of the buffer.
|
| -// (This is different from the case when we're looping, which is tested in loop-comprehensive.)
|
| -{ description: "start(when, 0, 15_frames): play with whole buffer, with long duration (clipped)",
|
| - offsetFrame: 0, durationFrames: 15, renderFrames: 16, playbackRate: 1, expected: [0,1,2,3,4,5,6,7,0,0,0,0,0,0,0,0] },
|
| -
|
| -// Enable test when AudioBufferSourceNode hack is fixed: https://bugs.webkit.org/show_bug.cgi?id=77224
|
| -// { description: "start(when, 3_frames, 3_frames): play a middle section with explicit offset and duration",
|
| -// offsetFrame: 3, durationFrames: 3, renderFrames: 16, playbackRate: 1, expected: [4,5,6,7,0,0,0,0,0,0,0,0,0,0,0,0] },
|
| -
|
| -];
|
| -
|
| -let sampleRate = 44100;
|
| -let buffer;
|
| -let bufferFrameLength = 8;
|
| -let testSpacingFrames = 32;
|
| -let testSpacingSeconds = testSpacingFrames / sampleRate;
|
| -let totalRenderLengthFrames = tests.length * testSpacingFrames;
|
| -
|
| -function runLoopTest(context, testNumber, test) {
|
| - let source = context.createBufferSource();
|
| -
|
| - source.buffer = buffer;
|
| - source.playbackRate.value = test.playbackRate;
|
| -
|
| - source.connect(context.destination);
|
| -
|
| - // Render each test one after the other, spaced apart by testSpacingSeconds.
|
| - let startTime = testNumber * testSpacingSeconds;
|
| -
|
| - if (test.offsetFrame == "none" && test.durationFrames == "none") {
|
| - source.start(startTime);
|
| - } else if (test.durationFrames == "none") {
|
| - let offset = test.offsetFrame / context.sampleRate;
|
| - source.start(startTime, offset);
|
| - } else {
|
| - let offset = test.offsetFrame / context.sampleRate;
|
| - let duration = test.durationFrames / context.sampleRate;
|
| - source.start(startTime, offset, duration);
|
| - }
|
| -}
|
| -
|
| -audit.define("Tests AudioBufferSourceNode start()", function (task, should) {
|
| - // Create offline audio context.
|
| - let context = new OfflineAudioContext(1, totalRenderLengthFrames, sampleRate);
|
| - buffer = createTestBuffer(context, bufferFrameLength);
|
| -
|
| - for (let i = 0; i < tests.length; ++i)
|
| - runLoopTest(context, i, tests[i]);
|
| -
|
| - context.startRendering()
|
| - .then(function (audioBuffer) {
|
| - checkAllTests(audioBuffer, should);
|
| - task.done();
|
| - });
|
| -});
|
| -
|
| -audit.run();
|
| -</script>
|
| -
|
| -</body>
|
| + <head>
|
| + <title>
|
| + audiobuffersource-start.html
|
| + </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/audiobuffersource-testing.js"></script>
|
| + </head>
|
| + <body>
|
| + <script id="layout-test-code">
|
| + let audit = Audit.createTaskRunner();
|
| +
|
| + // The following test cases assume an AudioBuffer of length 8 whose PCM
|
| + // data is a linear ramp, 0, 1, 2, 3,...
|
| +
|
| + let tests = [
|
| +
|
| + {
|
| + description:
|
| + 'start(when): implicitly play whole buffer from beginning to end',
|
| + offsetFrame: 'none',
|
| + durationFrames: 'none',
|
| + renderFrames: 16,
|
| + playbackRate: 1,
|
| + expected: [0, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0]
|
| + },
|
| +
|
| + {
|
| + description:
|
| + 'start(when, 0): play whole buffer from beginning to end explicitly giving offset of 0',
|
| + offsetFrame: 0,
|
| + durationFrames: 'none',
|
| + renderFrames: 16,
|
| + playbackRate: 1,
|
| + expected: [0, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0]
|
| + },
|
| +
|
| + {
|
| + description:
|
| + 'start(when, 0, 8_frames): play whole buffer from beginning to end explicitly giving offset of 0 and duration of 8 frames',
|
| + offsetFrame: 0,
|
| + durationFrames: 8,
|
| + renderFrames: 16,
|
| + playbackRate: 1,
|
| + expected: [0, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0]
|
| + },
|
| +
|
| + {
|
| + description:
|
| + 'start(when, 4_frames): play with explicit non-zero offset',
|
| + offsetFrame: 4,
|
| + durationFrames: 'none',
|
| + renderFrames: 16,
|
| + playbackRate: 1,
|
| + expected: [4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
| + },
|
| +
|
| + {
|
| + description:
|
| + 'start(when, 4_frames, 4_frames): play with explicit non-zero offset and duration',
|
| + offsetFrame: 4,
|
| + durationFrames: 4,
|
| + renderFrames: 16,
|
| + playbackRate: 1,
|
| + expected: [4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
| + },
|
| +
|
| + {
|
| + description:
|
| + 'start(when, 7_frames): play with explicit non-zero offset near end of buffer',
|
| + offsetFrame: 7,
|
| + durationFrames: 1,
|
| + renderFrames: 16,
|
| + playbackRate: 1,
|
| + expected: [7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
| + },
|
| +
|
| + {
|
| + description:
|
| + 'start(when, 8_frames): play with explicit offset at end of buffer',
|
| + offsetFrame: 8,
|
| + durationFrames: 0,
|
| + renderFrames: 16,
|
| + playbackRate: 1,
|
| + expected: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
| + },
|
| +
|
| + {
|
| + description:
|
| + 'start(when, 9_frames): play with explicit offset past end of buffer',
|
| + offsetFrame: 8,
|
| + durationFrames: 0,
|
| + renderFrames: 16,
|
| + playbackRate: 1,
|
| + expected: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
| + },
|
| +
|
| + // When the duration exceeds the buffer, just play to the end of the
|
| + // buffer. (This is different from the case when we're looping, which is
|
| + // tested in loop-comprehensive.)
|
| + {
|
| + description:
|
| + 'start(when, 0, 15_frames): play with whole buffer, with long duration (clipped)',
|
| + offsetFrame: 0,
|
| + durationFrames: 15,
|
| + renderFrames: 16,
|
| + playbackRate: 1,
|
| + expected: [0, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0]
|
| + },
|
| +
|
| + // Enable test when AudioBufferSourceNode hack is fixed:
|
| + // https://bugs.webkit.org/show_bug.cgi?id=77224 { description:
|
| + // "start(when, 3_frames, 3_frames): play a middle section with explicit
|
| + // offset and duration",
|
| + // offsetFrame: 3, durationFrames: 3, renderFrames: 16, playbackRate:
|
| + // 1, expected: [4,5,6,7,0,0,0,0,0,0,0,0,0,0,0,0] },
|
| +
|
| + ];
|
| +
|
| + let sampleRate = 44100;
|
| + let buffer;
|
| + let bufferFrameLength = 8;
|
| + let testSpacingFrames = 32;
|
| + let testSpacingSeconds = testSpacingFrames / sampleRate;
|
| + let totalRenderLengthFrames = tests.length * testSpacingFrames;
|
| +
|
| + function runLoopTest(context, testNumber, test) {
|
| + let source = context.createBufferSource();
|
| +
|
| + source.buffer = buffer;
|
| + source.playbackRate.value = test.playbackRate;
|
| +
|
| + source.connect(context.destination);
|
| +
|
| + // Render each test one after the other, spaced apart by
|
| + // testSpacingSeconds.
|
| + let startTime = testNumber * testSpacingSeconds;
|
| +
|
| + if (test.offsetFrame == 'none' && test.durationFrames == 'none') {
|
| + source.start(startTime);
|
| + } else if (test.durationFrames == 'none') {
|
| + let offset = test.offsetFrame / context.sampleRate;
|
| + source.start(startTime, offset);
|
| + } else {
|
| + let offset = test.offsetFrame / context.sampleRate;
|
| + let duration = test.durationFrames / context.sampleRate;
|
| + source.start(startTime, offset, duration);
|
| + }
|
| + }
|
| +
|
| + audit.define(
|
| + 'Tests AudioBufferSourceNode start()', function(task, should) {
|
| + // Create offline audio context.
|
| + let context =
|
| + new OfflineAudioContext(1, totalRenderLengthFrames, sampleRate);
|
| + buffer = createTestBuffer(context, bufferFrameLength);
|
| +
|
| + for (let i = 0; i < tests.length; ++i)
|
| + runLoopTest(context, i, tests[i]);
|
| +
|
| + context.startRendering().then(function(audioBuffer) {
|
| + checkAllTests(audioBuffer, should);
|
| + task.done();
|
| + });
|
| + });
|
| +
|
| + audit.run();
|
| + </script>
|
| + </body>
|
| </html>
|
|
|