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> |