| OLD | NEW |
| (Empty) |
| 1 <!doctype html> | |
| 2 <html> | |
| 3 <head> | |
| 4 <script src="../resources/js-test.js"></script> | |
| 5 <script src="resources/compatibility.js"></script> | |
| 6 <script src="resources/audit-util.js"></script> | |
| 7 <script src="resources/audio-testing.js"></script> | |
| 8 <script src="resources/panner-formulas.js"></script> | |
| 9 <title>Test setValueCurveAtTime Copies the Curve Data</title> | |
| 10 </head> | |
| 11 | |
| 12 <body> | |
| 13 <script> | |
| 14 description("Test setValueCurveAtTime Copies the Curve Data"); | |
| 15 window.jsTestIsAsync = true; | |
| 16 | |
| 17 var sampleRate = 48000; | |
| 18 var renderFrames = 1024; | |
| 19 var renderDuration = renderFrames / sampleRate; | |
| 20 | |
| 21 var audit = Audit.createTaskRunner(); | |
| 22 | |
| 23 // Test that changing the curve array to setValueCurveAtTime doesn't | |
| 24 // change the automation output. | |
| 25 audit.defineTask("test-copy", function (done) { | |
| 26 // Two-channel context; channel 0 is the test result, and channel 1 is | |
| 27 // the expected result. | |
| 28 var context = new OfflineAudioContext(2, renderFrames, sampleRate); | |
| 29 | |
| 30 var source = context.createBufferSource(); | |
| 31 source.buffer = createConstantBuffer(context, 1, 1); | |
| 32 source.loop = true; | |
| 33 | |
| 34 // Create two gain nodes. gainRef is the reference with the expected | |
| 35 // automation results. gainTest is the test which will have the curve | |
| 36 // modified. | |
| 37 var gainTest = context.createGain(); | |
| 38 var gainRef = context.createGain(); | |
| 39 | |
| 40 var merger = context.createChannelMerger(2); | |
| 41 | |
| 42 // The actual curve data can be anything, but we use this for | |
| 43 // simplicity. | |
| 44 var curveData = [1, 0]; | |
| 45 var curveRef = Float32Array.from(curveData); | |
| 46 var curveTest = Float32Array.from(curveData); | |
| 47 | |
| 48 // Create the graph. | |
| 49 source.connect(gainTest); | |
| 50 source.connect(gainRef); | |
| 51 gainTest.connect(merger, 0, 0); | |
| 52 gainRef.connect(merger, 0, 1); | |
| 53 merger.connect(context.destination); | |
| 54 | |
| 55 // Initialize the gains. | |
| 56 gainTest.gain.setValueAtTime(0, 0); | |
| 57 gainRef.gain.setValueAtTime(0, 0); | |
| 58 | |
| 59 // Set up the value curve. At this point curveTest and curveRef are the | |
| 60 // same. | |
| 61 gainTest.gain.setValueCurveAtTime(curveTest, 0, renderDuration); | |
| 62 gainRef.gain.setValueCurveAtTime(curveRef, 0, renderDuration); | |
| 63 | |
| 64 // After rendering has started, modify curveTest. | |
| 65 context.suspend(128 / sampleRate).then(function () { | |
| 66 // Change the values of curve now. Any transformation is ok as long | |
| 67 // as curveTest changes. We do this to make it really obvious. | |
| 68 for (var k = 0; k < curveTest.length; ++k) | |
| 69 curveTest[k] = 100 * curveTest[k] + 1; | |
| 70 }).then(context.resume.bind(context)); | |
| 71 | |
| 72 // Start the test! | |
| 73 source.start(); | |
| 74 | |
| 75 context.startRendering().then(function (resultBuffer) { | |
| 76 var testData = resultBuffer.getChannelData(0); | |
| 77 var refData = resultBuffer.getChannelData(1); | |
| 78 | |
| 79 // The test result and the reference should be identical since | |
| 80 // changing the curve data should not affect the automation. | |
| 81 var success = Should("setValueCurve output", testData).beEqualToArray(
refData); | |
| 82 | |
| 83 if (success) | |
| 84 testPassed("Changing the curve data did not change the result."); | |
| 85 else | |
| 86 testFailed("Changing the curve data unexpectedly changed the result.
"); | |
| 87 }).then(done); | |
| 88 }); | |
| 89 | |
| 90 audit.defineTask("finish", function (done) { | |
| 91 finishJSTest(); | |
| 92 done(); | |
| 93 }); | |
| 94 | |
| 95 audit.runTasks(); | |
| 96 </script> | |
| 97 </body> | |
| 98 </html> | |
| OLD | NEW |