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

Unified Diff: third_party/WebKit/LayoutTests/webaudio/audioparam-setValueCurve-copy.html

Issue 2016563002: AudioParam.setValueCurveAtTime() should copy the curve data (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 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 side-by-side diff with in-line comments
Download patch
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>

Powered by Google App Engine
This is Rietveld 408576698