summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/webaudio/the-audio-api/the-waveshapernode-interface/curve-tests.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/webaudio/the-audio-api/the-waveshapernode-interface/curve-tests.html')
-rw-r--r--testing/web-platform/tests/webaudio/the-audio-api/the-waveshapernode-interface/curve-tests.html212
1 files changed, 0 insertions, 212 deletions
diff --git a/testing/web-platform/tests/webaudio/the-audio-api/the-waveshapernode-interface/curve-tests.html b/testing/web-platform/tests/webaudio/the-audio-api/the-waveshapernode-interface/curve-tests.html
deleted file mode 100644
index 791b74a6c..000000000
--- a/testing/web-platform/tests/webaudio/the-audio-api/the-waveshapernode-interface/curve-tests.html
+++ /dev/null
@@ -1,212 +0,0 @@
-<!doctype html>
-<html>
-<head>
- <title>WaveShaperNode interface - Curve tests | WebAudio</title>
-
- <script type="text/javascript" src="/resources/testharness.js"></script>
- <script type="text/javascript" src="/resources/testharnessreport.js"></script>
- <script type="text/javascript" src="../../js/vendor-prefixes.js"></script>
-</head>
-<body>
- <div id="log">
- </div>
-
- <script type="text/javascript">
- var sampleRate=44100.0;
- var tolerance=0.01;
-
- /*
- Testing that -1, 0 and +1 map correctly to curve (with 1:1 correlation)
- =======================================================================
- From the specification:
- The input signal is nominally within the range -1 -> +1.
- Each input sample within this range will index into the shaping curve with a signal level of zero corresponding
- to the center value of the curve array.
- */
- (function() {
- var threeElementCurve=[2.0, -3.0, 4.0];
- var inputData=[-1.0, 0, 1.0];
- var expectedData=[2.0, -3.0, 4.0];
- executeTest(threeElementCurve, inputData, expectedData, "Testing that -1, 0 and +1 map correctly to curve (with 1:1 correlation)");
- })();
-
- /*
- Testing interpolation (where inputs don't correlate directly to curve elements)
- ===============================================================================
- From the specification:
- The implementation must perform linear interpolation between adjacent points in the curve.
- */
- (function() {
- var threeElementCurve=[2.0, -3.0, 4.0];
- var inputData=[-0.5, +0.5, +0.75];
- var expectedData=[-0.5, +0.5, +2.25];
- executeTest(threeElementCurve, inputData, expectedData, "Testing interpolation (where inputs don't correlate directly to curve elements)");
- })();
-
- /*
- Testing out-of-range inputs (should be mapped to the first/last elements of the curve)
- ======================================================================================
- From the specification:
- Any sample value less than -1 will correspond to the first value in the curve array.
- Any sample value greater than +1 will correspond to the last value in the curve array.
- */
- (function() {
- var threeElementCurve=[2.0, -3.0, 4.0];
- var inputData=[-1.5, +1.5];
- var expectedData=[2.0, 4.0];
- executeTest(threeElementCurve, inputData, expectedData, "Testing out-of-range inputs (should be mapped to the first/last elements of the curve)");
- })();
-
- /*
- Testing a 2-element curve (does not have a middle element)
- ==========================================================
- From the specification:
- Each input sample within this range will index into the shaping curve with a signal level of zero corresponding
- to the center value of the curve array.
- The implementation must perform linear interpolation between adjacent points in the curve.
- */
- (function() {
- var twoElementCurve=[2.0, -2.0];
- var inputData=[-1.0, 0, 1.0];
- var expectedData=[2.0, 0.0, -2.0];
- executeTest(twoElementCurve, inputData, expectedData, "Testing a 2-element curve (does not have a middle element)");
- })();
-
- /*
- Testing a 4-element curve (does not have a middle element)
- ==========================================================
- From the specification:
- Each input sample within this range will index into the shaping curve with a signal level of zero corresponding
- to the center value of the curve array.
- The implementation must perform linear interpolation between adjacent points in the curve.
- */
- (function() {
- var fourElementCurve=[1.0, 2.0, 4.0, 7.0];
- var inputData=[-1.0, 0, 1.0];
- var expectedData=[1.0, 3.0, 7.0];
- executeTest(fourElementCurve, inputData, expectedData, "Testing a 4-element curve (does not have a middle element)");
- })();
-
- /*
- Testing a huge curve
- ====================
- From the specification:
- Each input sample within this range will index into the shaping curve with a signal level of zero corresponding
- to the center value of the curve array.
- */
- (function() {
- var bigCurve=[];
- for(var i=0;i<=60000;i++) { bigCurve.push(i/3.5435); }
- var inputData=[-1.0, 0, 1.0];
- var expectedData=[bigCurve[0], bigCurve[30000], bigCurve[60000]];
- executeTest(bigCurve, inputData, expectedData, "Testing a huge curve");
- })();
-
- /*
- Testing single-element curve (boundary condition)
- =================================================
- From the specification:
- Each input sample within this range will index into the shaping curve with a signal level of zero corresponding
- to the center value of the curve array.
- Any sample value less than -1 will correspond to the first value in the curve array.
- Any sample value greater than +1 will correspond to the last value in the curve array.
- The implementation must perform linear interpolation between adjacent points in the curve.
- Note:
- I found a post on the W3C audio mailing list (from one of the Chris's) that suggested it would be feasible
- to use the WaveShaperNode to create constant values.
- */
- (function() {
- var oneElementCurve=[1.0];
- var inputData=[-1.0, 0, 1.0, -2.0, 2.0];
- var expectedData=[1.0, 1.0, 1.0, 1.0, 1.0];
- executeTest(oneElementCurve, inputData, expectedData, "Testing single-element curve (boundary condition)");
- })();
-
- /*
- Testing null curve (should return input values)
- ===============================================
- From the specification:
- Initially the curve attribute is null, which means that the WaveShaperNode will pass its input to its output
- without modification.
- */
- (function() {
- var inputData=[-1.0, 0, 1.0, 2.0];
- var expectedData=[-1.0, 0.0, 1.0, 2.0];
- executeTest(null, inputData, expectedData, "Testing null curve (should return input values)");
- })();
-
- /*
- Testing zero-element curve (unspecified result)
- ===============================================
- From the specification:
- Unspecified result (I assume it will be treated in the same way as a null curve).
- Note:
- Mozilla test_waveShaperNoCurve.html indicates they expect same results as a null curve.
- */
- (function() {
- var zeroElementCurve=[];
- var inputData=[-1.0, 0, 1.0, 2.0];
- var expectedData=[-1.0, 0.0, 1.0, 2.0];
- executeTest(zeroElementCurve, inputData, expectedData, "Testing zero-element curve (unspecified result)");
- })();
-
-
- /**
- * Function that does the actual testing (using an asynchronous test).
- * @param {?Array.<number>} curveData - Array containing values for the WaveShaper curve.
- * @param {!Array.<number>} inputData - Array containing values for the input stream.
- * @param {!Array.<number>} expectedData - Array containing expected results for each of the corresponding inputs.
- * @param {!string} testName - Name of the test case.
- */
- function executeTest(curveData, inputData, expectedData, testName) {
- var stTest=async_test("WaveShaperNode - "+testName);
-
- // Create offline audio context.
- var ac=new OfflineAudioContext(1, inputData.length, sampleRate);
-
- // Create the WaveShaper and its curve.
- var waveShaper=ac.createWaveShaper();
- if(curveData!=null) {
- var curve=new Float32Array(curveData.length);
- for(var i=0;i<curveData.length;i++) { curve[i]=curveData[i]; }
- waveShaper.curve=curve;
- }
- waveShaper.connect(ac.destination);
-
- // Create buffer containing the input values.
- var inputBuffer=ac.createBuffer(1, Math.max(inputData.length, 2), sampleRate);
- var d=inputBuffer.getChannelData(0);
- for(var i=0;i<inputData.length;i++) { d[i]=inputData[i]; }
-
- // Play the input buffer through the WaveShaper.
- var src=ac.createBufferSource();
- src.buffer=inputBuffer;
- src.connect(waveShaper);
- src.start();
-
- // Test the outputs match the expected values.
- ac.oncomplete=function(ev) {
- var d=ev.renderedBuffer.getChannelData(0);
-
- stTest.step(function() {
- for(var i=0;i<expectedData.length;i++) {
- var curveText="null";
- if(curve!=null) {
- if(curveData.length<20) {
- curveText=curveData.join(",");
- } else {
- curveText="TooBigToDisplay ("+(curveData.length-1)+" elements)";
- }
- }
- var comment="Input="+inputData[i]+", Curve=["+curveText+"] >>> ";
- assert_approx_equals(d[i], expectedData[i], tolerance, comment);
- }
- });
-
- stTest.done();
- };
- ac.startRendering();
- }
- </script>
-</body>
-</html>