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

Side by Side Diff: third_party/WebKit/LayoutTests/webaudio/audioparam-clamp-time-to-current-time.html

Issue 2581463002: Refactor WebAudio test directory (Closed)
Patch Set: Use correct path for wav result files Created 4 years 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 <head>
4 <title>Test Clamping of AudioParam Time</title>
5 <script src="../resources/testharness.js"></script>
6 <script src="../resources/testharnessreport.js"></script>
7 <script src="resources/audit-util.js"></script>
8 <script src="resources/audio-testing.js"></script>
9 </head>
10
11 <body>
12 <script>
13 // Fairly arbitrary sample rate and render frames.
14 var sampleRate = 24000;
15 var renderFrames = 1024;
16
17 var audit = Audit.createTaskRunner();
18
19 audit.defineTask("setValue", function (taskDone) {
20 var suspendFrame = 128;
21 createGraph({
22 suspendFrame: suspendFrame,
23 method: "setValueAtTime",
24 initialGain: 0,
25 arg0: 1,
26 })
27 .then(function (resultBuffer) {
28 // Just verify that the cosine wave actually started at
29 // suspendFrame.
30 var result = resultBuffer.getChannelData(0);
31 var success = true;
32
33 success = Should("Output[0-" + (suspendFrame - 1) + "]",
34 result.slice(0, suspendFrame))
35 .beConstantValueOf(0) && success;
36 success = Should("Output[" + suspendFrame + "-" + (
37 renderFrames - 1) + "]",
38 result.slice(suspendFrame))
39 .beConstantValueOf(1) && success;
40
41 Should("*** setValueAtTime in the past", success)
42 .summarize(
43 "correctly clamped to current time",
44 "was not correctly clamped to current time");
45 })
46 .then(taskDone);
47 });
48
49 audit.defineTask("linear", function (taskDone) {
50 var suspendFrame = 128;
51 createGraph({
52 suspendFrame: suspendFrame,
53 method: "linearRampToValueAtTime",
54 initialGain: 1,
55 arg0: 0.5
56 })
57 .then(function (resultBuffer) {
58 // Just verify that the cosine wave actually started at
59 // suspendFrame.
60 var result = resultBuffer.getChannelData(0);
61 var success = true;
62
63 success = Should("Output[0-" + (suspendFrame - 1) + "]",
64 result.slice(0, suspendFrame))
65 .beConstantValueOf(1) && success;
66 success = Should("Output[" + suspendFrame + "-" + (
67 renderFrames - 1) + "]",
68 result.slice(suspendFrame))
69 .beConstantValueOf(0.5) && success;
70
71 Should("*** linearRampToValueAtTime in the past", success)
72 .summarize(
73 "correctly clamped to current time",
74 "was not correctly clamped to current time");
75 })
76 .then(taskDone);
77 });
78
79 audit.defineTask("exponential", function (taskDone) {
80 var suspendFrame = 128;
81 createGraph({
82 suspendFrame: suspendFrame,
83 method: "exponentialRampToValueAtTime",
84 initialGain: 1,
85 arg0: 0.5
86 })
87 .then(function (resultBuffer) {
88 // Just verify that the cosine wave actually started at
89 // suspendFrame.
90 var result = resultBuffer.getChannelData(0);
91 var success = true;
92
93 success = Should("Output[0-" + (suspendFrame - 1) + "]",
94 result.slice(0, suspendFrame))
95 .beConstantValueOf(1) && success;
96 success = Should("Output[" + suspendFrame + "-" + (
97 renderFrames - 1) + "]",
98 result.slice(suspendFrame))
99 .beConstantValueOf(0.5) && success;
100
101 Should("*** exponentialRampToValueAtTime in the past",
102 success)
103 .summarize(
104 "correctly clamped to current time",
105 "was not correctly clamped to current time");
106 })
107 .then(taskDone);
108 });
109
110 audit.defineTask("setTarget", function (taskDone) {
111 var suspendFrame = 128;
112 createGraph({
113 suspendFrame: suspendFrame,
114 method: "setTargetAtTime",
115 initialGain: 1,
116 arg0: 0.5,
117 moreArgs: 0.1
118 })
119 .then(function (resultBuffer) {
120 // Just verify that the cosine wave actually started at
121 // suspendFrame.
122 var result = resultBuffer.getChannelData(0);
123 var success = true;
124
125 success = Should("Output[0-" + (suspendFrame - 1) + "]",
126 result.slice(0, suspendFrame))
127 .beConstantValueOf(1) && success;
128 // For the samples past the suspend time, we only care that first
129 // value is 1 and that the rest are not zero.
130 success = Should("Output[" + suspendFrame + "]",
131 result[suspendFrame]).beEqualTo(1) && success;
132
133 var positive = result.slice(suspendFrame + 1).every(x => x >
134 0);
135 success = Should("Output[" + (suspendFrame + 1) + "-" +
136 (renderFrames - 1) + "] contains only positive values",
137 positive)
138 .beEqualTo(true) && success;
139
140 Should("*** setTargetAtTime in the past", success)
141 .summarize(
142 "correctly clamped to current time",
143 "was not correctly clamped to current time");
144 })
145 .then(taskDone);
146 });
147
148 audit.defineTask("setValueCurve", function (taskDone) {
149 var suspendFrame = 128;
150 createGraph({
151 suspendFrame: suspendFrame,
152 method: "setValueCurveAtTime",
153 initialGain: 1,
154 arg0: Float32Array.from([2, 3]),
155 moreArgs: 0.1
156 })
157 .then(function (resultBuffer) {
158 // Just verify that the cosine wave actually started at
159 // suspendFrame.
160 var result = resultBuffer.getChannelData(0);
161 var success = true;
162
163 success = Should("Output[0-" + (suspendFrame - 1) + "]",
164 result.slice(0, suspendFrame))
165 .beConstantValueOf(1) && success;
166
167 // The selected curve contains values greater than or equal to 2.
168 // Just verify that all values are greater than or equal to 2.
169 var biggerThan2 = result.slice(suspendFrame).every(x => x >=
170 2);
171 success = Should("Output[" + suspendFrame + "-" + (
172 renderFrames - 1) + "]",
173 biggerThan2)
174 .beEqualTo(true) && success;
175
176 Should("*** setValueCurveAtTime in the past", success)
177 .summarize(
178 "correctly clamped to current time",
179 "was not correctly clamped to current time");
180 })
181 .then(taskDone);
182 });
183
184
185 // Create the test graph consisting of a constant source followed by a
186 // gain node. The gain node automations will be tested. |options|
187 // specifies the parameters for the test including
188 //
189 // suspendFrame: time at which we schedule the automation call
190 // method: the name of automation method to be tested
191 // initialGain: the initial gain at time 0 for the gain node
192 // arg0: the first argument to be supplied to the automation method.
193 // moreArgs: An array of any additional arguments for the automation met hod.
194 function createGraph(options) {
195 var context = new OfflineAudioContext(1, renderFrames, sampleRate);
196
197 var cosineWave = new PeriodicWave(context, {
198 real: [0, 1]
199 });
200
201 var src = new OscillatorNode(context, {
202 periodicWave: cosineWave,
203 frequency: 0
204 });
205
206 // The gain node whose automations we're testing.
207 var gain = new GainNode(context, {
208 gain: 0
209 });
210
211 src.connect(gain).connect(context.destination);
212
213 gain.gain.setValueAtTime(options.initialGain, 0);
214
215 // Suspend rendering so that we can call the automation method at the
216 // right time. |startTime| is the time for the automation method. It
217 // must be some time before the suspend time.
218 var suspendFrame = options.suspendFrame;
219 var startTime = (suspendFrame / 2) / context.sampleRate;
220 context.suspend(suspendFrame / context.sampleRate)
221 .then(function () {
222 // Call the appropriate automation method with the desired
223 // automation value, time, and any other arguments needed.
224 gain.gain[options.method](...[options.arg0, startTime, options.moreA rgs]);
225 })
226 .then(context.resume.bind(context));
227
228 // Start the source and begin rendering, returning the promise from
229 // rendering.
230 src.start();
231
232 return context.startRendering();
233 }
234
235 audit.runTasks();
236 </script>
237 </body>
238 </html>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698