Index: third_party/WebKit/LayoutTests/webaudio/periodicwave-lengths.html |
diff --git a/third_party/WebKit/LayoutTests/webaudio/periodicwave-lengths.html b/third_party/WebKit/LayoutTests/webaudio/periodicwave-lengths.html |
deleted file mode 100644 |
index b2f4adedb8446e42583ecf31afc66407b92e03f8..0000000000000000000000000000000000000000 |
--- a/third_party/WebKit/LayoutTests/webaudio/periodicwave-lengths.html |
+++ /dev/null |
@@ -1,264 +0,0 @@ |
-<!doctype html> |
-<html> |
- <head> |
- <title>Test Different PeriodicWave Lengths at Different Sample Rates</title> |
- <script src="../resources/js-test.js"></script> |
- <script src="resources/compatibility.js"></script> |
- <script src="resources/audit-util.js"></script> |
- <script src="resources/audio-testing.js"></script> |
- </head> |
- |
- <body> |
- <script> |
- description("Test Different PeriodicWave Lengths at Different Sample Rates"); |
- window.jsTestIsAsync = true; |
- |
- // Test PeriodicWave objects with varying number of coefficients at different sample rates. |
- // Basically, verify that the coefficients are used at the appropriate sample rates. This is |
- // done by comparing the outputs of two periodic waves used in oscillators. The output should |
- // either be exactly zero or not depending on whether the coefficients were used. |
- |
- var renderLength = 1; |
- var context; |
- |
- var audit = Audit.createTaskRunner(); |
- |
- // The set of Audit tests to be run to verify that PeriodicWave is using the correct number of |
- // coefficients. The name does not have to be unique; the index of the entry is appended to |
- // the test. Every entry (except the last) needs sampleRate, bigWave, smallWave, and |
- // verifier values. |
- |
- var testSet = [ |
- // Tests for contexts at 192 kHz. |
- |
- // Test that we use more than 2048 Fourier coefficients at 192 kHz sample rate. Basically |
- // verifies that 8192 is acceptable. |
- { |
- name: "192khz-test-1", |
- sampleRate: 192000, |
- bigWave: 8192, |
- smallWave: 2048, |
- verifier: resultShouldBeNonZero |
- }, |
- |
- // Test that we use at least 2049 Fourier coefficients at 192 kHz sample rate. |
- { |
- name: "192khz-test-2", |
- sampleRate: 192000, |
- bigWave: 2049, |
- smallWave: 2048, |
- verifier: resultShouldBeNonZero |
- }, |
- |
- // Test that we use all 8192 Fourier coefficients at 192 kHz sample rate. Ideally, we'd |
- // like to compare 8191 coefficients vs 8192 coefficients. However, due to single-precision |
- // arithmetic, the wave forms are identical in this case. Thus, use a somewhat smaller |
- // value where the wave forms are actually different. |
- { |
- name: "192khz-test-3", |
- sampleRate: 192000, |
- bigWave: 8192, |
- smallWave: (8 - 1 / 256) * 1024, |
- verifier: resultShouldBeNonZero |
- }, |
- |
- // Tests for contexts at 48 kHz. |
- |
- // Test that we do not use more than 2048 Fourier coefficients at 48 kHz. This depends on |
- // the internal implementation where, for backward compatibility and speed, we only use 2048 |
- // coefficients at 48 kHz. (This is also true for rates below 88.2 kHz.) Also tests that |
- // 8192 coefficients are allowed (but not all coefficients are used, of course). |
- { |
- name: "48khz-test-1", |
- sampleRate: 48000, |
- bigWave: 8192, |
- smallWave: 2048, |
- verifier: resultShouldBeZero |
- }, |
- |
- // Test that we do not use more than 2048 Fourier coefficients. |
- { |
- name: "48khz-test-2", |
- sampleRate: 48000, |
- bigWave: 2049, |
- smallWave: 2048, |
- verifier: resultShouldBeZero |
- }, |
- |
- // It's not immediately clear with single-preicison arithmetic that we can distinguish |
- // between 2049 and 2048 coefficients, so do one more test with slightly more coefficients. |
- { |
- name: "48khz-test-3", |
- sampleRate: 48000, |
- bigWave: (2 + 1 / 64) * 1024, |
- smallWave: 2048, |
- verifier: resultShouldBeZero |
- }, |
- |
- // Test that we use at least 2048 Fourier coefficients at 48 kHz. Ideally we want to |
- // compare 2047 and 2048 coefficients, but single-precision arithmetic makes the resulting |
- // waveforms the same. Hence use a smaller value that produces different waveforms. |
- { |
- name: "48khz-test-4", |
- sampleRate: 48000, |
- bigWave: 2048, |
- smallWave: 2046, |
- verifier: resultShouldBeNonZero |
- }, |
- |
- // Tests for contexts at 24 kHz. |
- |
- // Test that we do not use more than 1024 Fourier coefficients at 24 kHz. |
- { |
- name: "24khz-test-1", |
- sampleRate: 24000, |
- bigWave: 8192, |
- smallWave: 1024, |
- verifier: resultShouldBeZero |
- }, |
- |
- // Test that we do not use more than 1024 Fourier coefficients at 24 kHz. |
- { |
- name: "24khz-test-2", |
- sampleRate: 24000, |
- bigWave: 1025, |
- smallWave: 1024, |
- verifier: resultShouldBeZero |
- }, |
- |
- // Test that we use at least 1024 Fourier coefficients at 24 kHz. Again, 1023 and 1024 |
- // produce the same waveforms in single-precisiion so use a smaller wave table size. |
- { |
- name: "24khz-test-3", |
- sampleRate: 24000, |
- bigWave: 1024, |
- smallWave: 1022, |
- verifier: resultShouldBeNonZero |
- }, |
- ]; |
- |
- function generatePrefix (sampleRate, bigLength, smallLength) { |
- return "At " + (sampleRate / 1000) + " kHz, PeriodicWave with " |
- + bigLength + " coefficients vs " |
- + smallLength + ": "; |
- } |
- |
- // Returns a function the verifies that the result is zero. The parameters control what is |
- // printed in the messages. |
- function resultShouldBeZero(sampleRate, bigLength, smallLength) { |
- return function (buffer) { |
- var prefix = generatePrefix(sampleRate, bigLength, smallLength); |
- if (isBufferZero(buffer)) |
- testPassed(prefix + "identical as expected."); |
- else |
- testFailed(prefix + "unexpectedly differ."); |
- } |
- } |
- |
- // Returns a function the verifies that the result is non-zero. The parameters control what is |
- // printed in the messages. |
- function resultShouldBeNonZero(sampleRate, bigLength, smallLength) { |
- return function (buffer) { |
- var prefix = generatePrefix(sampleRate, bigLength, smallLength); |
- if (!isBufferZero(buffer)) |
- testPassed(prefix + "differ as expected."); |
- else |
- testFailed(prefix + "unexpectedly are identical."); |
- } |
- } |
- |
- // Creates a function that is used to run an Audit test for a given sample rate, periodic wave |
- // sizes, and verifier. |
- function createAuditTestFunction(sampleRate, bigLength, smallLength, verifier) { |
- return function (done) { |
- // Create the audio graph, render it, and then verify that the output is the expected |
- // result. |
- createAudioGraph(sampleRate, bigLength, smallLength); |
- |
- context.startRendering() |
- .then(verifier(sampleRate, bigLength, smallLength)) |
- .then(done); |
- } |
- } |
- |
- // Create the audio graph for the test. |
- function createAudioGraph(sampleRate, bigPeriodicWaveLength, smallPeriodicWaveLength) { |
- context = new OfflineAudioContext(1, renderLength * sampleRate, sampleRate); |
- |
- // Two PeriodicWave objects are created with different sizes (small and big). The contents |
- // are the same except that the samll sized PeriodicWave has fewer coefficients. |
- var smallWaveRealCoef = new Float32Array(smallPeriodicWaveLength); |
- var smallWaveImagCoef = new Float32Array(smallPeriodicWaveLength); |
- var bigWaveRealCoef = new Float32Array(bigPeriodicWaveLength); |
- var bigWaveImagCoef = new Float32Array(bigPeriodicWaveLength); |
- |
- // Set up the Fourier coefficients for a square wave. |
- for (var k = 0; k < bigPeriodicWaveLength; k += 2) { |
- bigWaveImagCoef[k] = 4 / Math.PI / k; |
- if (k < smallPeriodicWaveLength) |
- smallWaveImagCoef[k] = bigWaveImagCoef[k]; |
- } |
- |
- var smallPeriodicWave = context.createPeriodicWave(smallWaveRealCoef, smallWaveImagCoef); |
- var bigPeriodicWave = context.createPeriodicWave(bigWaveRealCoef, bigWaveImagCoef); |
- |
- // Create oscillators using these PeriodicWave's. |
- var smallOscillator = context.createOscillator(); |
- var bigOscillator = context.createOscillator(); |
- |
- smallOscillator.setPeriodicWave(smallPeriodicWave); |
- bigOscillator.setPeriodicWave(bigPeriodicWave); |
- |
- // Use a frequency of 1 Hz to make the distinction easier. Can't tell from this test, but |
- // if you plot the signals from these oscillators, it's very clear that they are different. |
- smallOscillator.frequency.value = 1; |
- bigOscillator.frequency.value = 1; |
- |
- // The desired output is the difference between these oscillators. |
- var gain = context.createGain(); |
- gain.gain.value = -1; |
- smallOscillator.connect(gain); |
- |
- gain.connect(context.destination); |
- bigOscillator.connect(context.destination); |
- |
- // Start the oscillators. |
- smallOscillator.start(); |
- bigOscillator.start(); |
- } |
- |
- // Return true if the buffer is exactly zero. |
- function isBufferZero(buffer) { |
- if (buffer.getChannelData(0).find(function (x) { return x != 0; })) |
- return false; |
- return true; |
- } |
- |
- // Ensure the actual Audit test name is unique by prepending an index to the provided test |
- // name. |
- function actualTestName(name, index) { |
- return index + ":" + name; |
- } |
- |
- // Define the tasks based on the entries in testSet. |
- function defineAuditTests () { |
- for (var k = 0; k < testSet.length; ++k) { |
- var test = testSet[k]; |
- var actualName = actualTestName(test.name, k); |
- audit.defineTask(actualName, |
- createAuditTestFunction(test.sampleRate, test.bigWave, test.smallWave, test.verifier)); |
- } |
- // Define the finish test last. |
- audit.defineTask(actualTestName("finish-tests", testSet.length), function (done) { |
- finishJSTest(); |
- done(); |
- }); |
- } |
- |
- defineAuditTests(); |
- audit.runTasks(); |
- |
- successfullyParsed = true; |
- </script> |
- </body> |
-</html> |