Chromium Code Reviews| Index: third_party/WebKit/LayoutTests/webaudio/audioparam-setValueCurve-copy.html |
| diff --git a/third_party/WebKit/LayoutTests/webaudio/audioparam-setValueCurve-copy.html b/third_party/WebKit/LayoutTests/webaudio/audioparam-setValueCurve-copy.html |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..72b5deb029e1ac40bb7c9d08afd2fbcfb490f04b |
| --- /dev/null |
| +++ b/third_party/WebKit/LayoutTests/webaudio/audioparam-setValueCurve-copy.html |
| @@ -0,0 +1,97 @@ |
| +<!doctype html> |
| +<html> |
| + <head> |
| + <script src="../resources/js-test.js"></script> |
| + <script src="resources/compatibility.js"></script> |
| + <script src="resources/audio-testing.js"></script> |
| + <script src="resources/panner-formulas.js"></script> |
| + <title>Test setValueCurveAtTime Copies the Curve Data</title> |
| + </head> |
| + |
| + <body> |
| + <script> |
| + description("Test setValueCurveAtTime Copies the Curve Data"); |
| + window.jsTestIsAsync = true; |
| + |
| + var sampleRate = 48000; |
| + var renderFrames = 1024; |
| + var renderDuration = renderFrames / sampleRate; |
| + |
| + var audit = Audit.createTaskRunner(); |
| + |
| + // Test that changing the curve array to setValueCurveAtTime doesn't |
| + // change the automation output. |
| + audit.defineTask("test-copy", function (done) { |
| + // Two-channel context; channel 0 is the test result, and channel 1 is |
| + // the expected result. |
| + var context = new OfflineAudioContext(2, renderFrames, sampleRate); |
| + |
| + var source = context.createBufferSource(); |
| + source.buffer = createConstantBuffer(context, 1, 1); |
| + source.loop = true; |
| + |
| + // Create two gain nodes. gainRef is the reference with the expected |
| + // automation results. gainTest is the test which will have the curve |
| + // modified. |
| + |
|
hongchan
2016/05/31 21:42:33
nit: can we remove this blank line?
Raymond Toy
2016/05/31 22:50:51
Done.
|
| + var gainTest = context.createGain(); |
| + var gainRef = context.createGain(); |
| + |
| + var merger = context.createChannelMerger(2); |
| + |
| + // The actual curve data can be anything, but we use this for simplicity. |
|
hongchan
2016/05/31 21:42:33
Let's wrap the comment at 80 cols.
Raymond Toy
2016/05/31 22:50:51
Done.
|
| + var curveData = [1, 0]; |
| + var curveRef = Float32Array.from(curveData); |
| + var curveTest = Float32Array.from(curveData); |
| + |
| + // Create the graph. |
| + source.connect(gainTest); |
| + source.connect(gainRef); |
| + gainTest.connect(merger, 0, 0); |
| + gainRef.connect(merger, 0, 1); |
| + merger.connect(context.destination); |
| + |
| + // Initialize the gains. |
| + gainTest.gain.setValueAtTime(0, 0); |
| + gainRef.gain.setValueAtTime(0, 0); |
| + |
| + // Set up the value curve. At this point curveTest and curveRef are the |
| + // same. |
| + gainTest.gain.setValueCurveAtTime(curveTest, 0, renderDuration); |
| + gainRef.gain.setValueCurveAtTime(curveRef, 0, renderDuration); |
| + |
| + // After rendering has started, modify curveTest. |
| + context.suspend(128 / sampleRate).then(function () { |
| + // Change the values of curve now. Any transformation is ok as long |
| + // as curveTest changes. We do this to make it really obvious. |
| + for (var k = 0; k < curveTest.length; ++k) |
| + curveTest[k] = 100 * curveTest[k] + 1; |
| + }).then(context.resume.bind(context)); |
| + |
| + // Start the test! |
| + source.start(); |
| + |
| + context.startRendering().then(function (resultBuffer) { |
| + var testData = resultBuffer.getChannelData(0); |
| + var refData = resultBuffer.getChannelData(1); |
| + |
| + // The test result and the reference should be identical since |
| + // changing the curve data should not affect the automation. |
| + var success = Should("setValueCurve output", testData).beEqualToArray(refData); |
| + |
| + if (success) |
| + testPassed("Changing the curve data did not change the result."); |
| + else |
| + testFailed("Changing the curve data unexpectedly changed the result."); |
| + }).then(done); |
| + }); |
| + |
| + audit.defineTask("finish", function (done) { |
| + finishJSTest(); |
| + done(); |
| + }); |
| + |
| + audit.runTasks(); |
| + </script> |
| + </body> |
| +</html> |