Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(208)

Side by Side Diff: third_party/WebKit/LayoutTests/webaudio/audiobuffersource-loop-grain-no-duration.html

Issue 2581463002: Refactor WebAudio test directory (Closed)
Patch Set: Use correct path for wav result files Created 3 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 <!DOCTYPE html>
2 <html>
3
4 <head>
5 <title>Test AudioBufferSourceNode looping without explicit duration</title>
6 <script src="../resources/js-test.js"></script>
7 <script src="resources/compatibility.js"></script>
8 <script src="resources/audit-util.js"></script>
9 <script src="resources/audio-testing.js"></script>
10 </head>
11
12 <body>
13 <script>
14 description("Test AudioBufferSourceNode looping without explicit duration");
15 window.jsTestIsAsync = true;
16
17 // Reasonably low sample rate for the optimum test speed.
18 var sampleRate = 4096;
19
20 var audit = Audit.createTaskRunner();
21
22 // Task: create a short linear ramp and enable looping. The test will
23 // verify that the ramp was looped the appropriate number of times.
24 audit.defineTask('loop-count', function (done) {
25 // How many loops of the source we want to render. Any whole number
26 // greater than 1 will work.
27 var loopCount = 4;
28 var sourceFrames = 8;
29 var renderFrames = sourceFrames * loopCount;
30
31 var context = new OfflineAudioContext(1, renderFrames, sampleRate);
32 var source = context.createBufferSource();
33 var linearRampBuffer = createLinearRampBuffer(context, sourceFrames);
34
35 source.buffer = linearRampBuffer;
36 source.connect(context.destination);
37
38 // Enable looping and start the source with an offset, but without a
39 // duration. In this case, the source should loop "forever".
40 // See crbug.com/457009.
41 source.loop = true;
42 source.start(0, 0);
43
44 context.startRendering().then(function (renderedBuffer) {
45 var badIndex = -1;
46 var success = true;
47
48 var actual = renderedBuffer.getChannelData(0);
49 var linearRamp = linearRampBuffer.getChannelData(0);
50
51 // Manually create a |loopCount| copies of linear ramps.
52 var expected = new Float32Array(linearRamp.length * loopCount);
53 for (var i = 0; i < loopCount; i++)
54 expected.set(linearRamp, linearRamp.length * i);
55
56 // The actual output should match the created loop.
57 Should('The output of actual and expected loops', actual)
58 .beEqualToArray(expected);
59 }).then(done);
60 });
61
62 // Task: Test that looping an AudioBufferSource works correctly if the
63 // source is started and the buffer is assigned later, but before the source
64 // would start.
65 audit.defineTask('delayed-start', function (done) {
66 var renderDuration = 2;
67 var context = new OfflineAudioContext(2, sampleRate * renderDuration, samp leRate);
68 var linearRampBuffer = createLinearRampBuffer(context, 128);
69
70 var normal = context.createBufferSource();
71 var delayed = context.createBufferSource();
72 var merger = context.createChannelMerger(2);
73
74 // Connect the normally started source to the left channel, and the
75 // delayed to the right channel.
76 normal.connect(merger, 0, 0);
77 delayed.connect(merger, 0, 1);
78 merger.connect(context.destination);
79
80 normal.buffer = linearRampBuffer;
81 normal.loop = true;
82 delayed.loop = true;
83
84 normal.start(1, 0);
85 delayed.start(1, 0);
86
87 // Assign the buffer to the delayed source node at 0.5 second.
88 context.suspend(0.5).then(function () {
89 delayed.buffer = linearRampBuffer;
90 context.resume();
91 });
92
93 context.startRendering().then(function (buffer) {
94 // The left and right channel must match regardless of the timing
95 // of buffer assignment.
96 Should('The content of the left and right channel',
97 buffer.getChannelData(0)).beEqualToArray(buffer.getChannelData(1));
98 }).then(done);
99 });
100
101 audit.defineTask('finish', function (done) {
102 finishJSTest();
103 done();
104 });
105
106 audit.runTasks(
107 'loop-count',
108 'delayed-start',
109 'finish'
110 );
111
112 successfullyParsed = true;
113 </script>
114 </body>
115
116 </html>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698