| Index: third_party/WebKit/LayoutTests/webaudio/PeriodicWave/periodicwave-lengths.html
|
| diff --git a/third_party/WebKit/LayoutTests/webaudio/PeriodicWave/periodicwave-lengths.html b/third_party/WebKit/LayoutTests/webaudio/PeriodicWave/periodicwave-lengths.html
|
| index 28e2940ff1621c1368f5f3a539952aa5dc46bea2..00ccbee22501cfe49ea275a5e06f4bceb9224a03 100644
|
| --- a/third_party/WebKit/LayoutTests/webaudio/PeriodicWave/periodicwave-lengths.html
|
| +++ b/third_party/WebKit/LayoutTests/webaudio/PeriodicWave/periodicwave-lengths.html
|
| @@ -1,55 +1,61 @@
|
| -<!doctype html>
|
| +<!DOCTYPE html>
|
| <html>
|
| <head>
|
| - <title>Test Different PeriodicWave Lengths at Different Sample Rates</title>
|
| + <title>
|
| + Test Different PeriodicWave Lengths at Different Sample Rates
|
| + </title>
|
| <script src="../../resources/testharness.js"></script>
|
| - <script src="../../resources/testharnessreport.js"></script>
|
| + <script src="../../resources/testharnessreport.js"></script>
|
| <script src="../resources/audit-util.js"></script>
|
| <script src="../resources/audit.js"></script>
|
| </head>
|
| -
|
| <body>
|
| - <script>
|
| - // 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 = [
|
| + <script id="layout-test-code">
|
| + // 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.
|
| +
|
| + let renderLength = 1;
|
| + let context;
|
| +
|
| + let 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.
|
| +
|
| + let 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.
|
| + // Test that we use more than 2048 Fourier coefficients at 192 kHz
|
| + // sample rate. Basically verifies that 8192 is acceptable.
|
| {
|
| - name: "192khz-test-1",
|
| + 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.
|
| + // Test that we use at least 2049 Fourier coefficients at 192 kHz sample
|
| + // rate.
|
| {
|
| - name: "192khz-test-2",
|
| + 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.
|
| + // Test that we use all 8192 Fourier coefficients at 192 kHz sample
|
| + // rate.
|
| {
|
| - name: "192khz-test-3",
|
| + name: '192khz-test-3',
|
| sampleRate: 192000,
|
| bigWave: 8192,
|
| smallWave: 8191,
|
| @@ -58,12 +64,14 @@
|
|
|
| // 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).
|
| + // 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",
|
| + name: '48khz-test-1',
|
| sampleRate: 48000,
|
| bigWave: 8192,
|
| smallWave: 2048,
|
| @@ -72,28 +80,30 @@
|
|
|
| // Test that we do not use more than 2048 Fourier coefficients.
|
| {
|
| - name: "48khz-test-2",
|
| + 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.
|
| + // 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",
|
| + 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.
|
| + // 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",
|
| + name: '48khz-test-4',
|
| sampleRate: 48000,
|
| bigWave: 2048,
|
| smallWave: 2046,
|
| @@ -102,28 +112,31 @@
|
|
|
| // Tests for contexts at 24 kHz.
|
|
|
| - // Test that we do not use more than 1024 Fourier coefficients at 24 kHz.
|
| + // Test that we do not use more than 1024 Fourier coefficients at 24
|
| + // kHz.
|
| {
|
| - name: "24khz-test-1",
|
| + 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.
|
| + // Test that we do not use more than 1024 Fourier coefficients at 24
|
| + // kHz.
|
| {
|
| - name: "24khz-test-2",
|
| + 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.
|
| + // 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",
|
| + name: '24khz-test-3',
|
| sampleRate: 24000,
|
| bigWave: 1024,
|
| smallWave: 1022,
|
| @@ -131,115 +144,126 @@
|
| },
|
| ];
|
|
|
| - function generatePrefix (sampleRate, bigLength, smallLength) {
|
| - return "At " + (sampleRate / 1000) + " kHz, PeriodicWave with "
|
| - + bigLength + " coefficients vs "
|
| - + smallLength + ": ";
|
| + 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.
|
| + // Returns a function the verifies that the result is zero. The
|
| + // parameters control what is printed in the messages.
|
| function resultShouldBeZero(should, sampleRate, bigLength, smallLength) {
|
| - return function (buffer) {
|
| - var prefix = generatePrefix(sampleRate, bigLength, smallLength);
|
| - should(isBufferZero(buffer), prefix + "are identical")
|
| - .beEqualTo(true);
|
| + return function(buffer) {
|
| + let prefix = generatePrefix(sampleRate, bigLength, smallLength);
|
| + should(isBufferZero(buffer), prefix + 'are identical')
|
| + .beEqualTo(true);
|
| }
|
| }
|
|
|
| - // Returns a function the verifies that the result is non-zero. The parameters control what is
|
| - // printed in the messages.
|
| - function resultShouldBeNonZero(should, sampleRate, bigLength, smallLength) {
|
| - return function (buffer) {
|
| - var prefix = generatePrefix(sampleRate, bigLength, smallLength);
|
| - should(!isBufferZero(buffer), prefix + "are different")
|
| - .beEqualTo(true);
|
| + // Returns a function the verifies that the result is non-zero. The
|
| + // parameters control what is printed in the messages.
|
| + function resultShouldBeNonZero(
|
| + should, sampleRate, bigLength, smallLength) {
|
| + return function(buffer) {
|
| + let prefix = generatePrefix(sampleRate, bigLength, smallLength);
|
| + should(!isBufferZero(buffer), prefix + 'are different')
|
| + .beEqualTo(true);
|
| }
|
| }
|
|
|
| - // 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 (task, should) => {
|
| - // Create the audio graph, render it, and then verify that the output is the expected
|
| - // result.
|
| - createAudioGraph(sampleRate, bigLength, smallLength);
|
| -
|
| - return context.startRendering()
|
| - .then(verifier(should, sampleRate, bigLength, smallLength))
|
| - .then(() => task.done());
|
| + // 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 (task, should) => {
|
| + // Create the audio graph, render it, and then verify that the output
|
| + // is the expected result.
|
| + createAudioGraph(sampleRate, bigLength, smallLength);
|
| +
|
| + return context.startRendering()
|
| + .then(verifier(should, sampleRate, bigLength, smallLength))
|
| + .then(() => task.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 sawtooth wave. We use
|
| - // sawtooth because all coefficients are non-zero
|
| - bigWaveImagCoef[0] = 0;
|
| - for (var k = 1; k < bigPeriodicWaveLength; k++) {
|
| - var piFactor = 2 / (Math.PI * k);
|
| - bigWaveImagCoef[k] = piFactor * ((k % 2 === 0) ? -1 : 1);
|
| - 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();
|
| + 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.
|
| + let smallWaveRealCoef = new Float32Array(smallPeriodicWaveLength);
|
| + let smallWaveImagCoef = new Float32Array(smallPeriodicWaveLength);
|
| + let bigWaveRealCoef = new Float32Array(bigPeriodicWaveLength);
|
| + let bigWaveImagCoef = new Float32Array(bigPeriodicWaveLength);
|
| +
|
| + // Set up the Fourier coefficients for a sawtooth wave. We use
|
| + // sawtooth because all coefficients are non-zero
|
| + bigWaveImagCoef[0] = 0;
|
| + for (let k = 1; k < bigPeriodicWaveLength; k++) {
|
| + let piFactor = 2 / (Math.PI * k);
|
| + bigWaveImagCoef[k] = piFactor * ((k % 2 === 0) ? -1 : 1);
|
| + if (k < smallPeriodicWaveLength)
|
| + smallWaveImagCoef[k] = bigWaveImagCoef[k];
|
| + }
|
| +
|
| + let smallPeriodicWave =
|
| + context.createPeriodicWave(smallWaveRealCoef, smallWaveImagCoef);
|
| + let bigPeriodicWave =
|
| + context.createPeriodicWave(bigWaveRealCoef, bigWaveImagCoef);
|
| +
|
| + // Create oscillators using these PeriodicWave's.
|
| + let smallOscillator = context.createOscillator();
|
| + let 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.
|
| + let 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; }))
|
| + 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.
|
| + // Ensure the actual Audit test name is unique by prepending an index to
|
| + // the provided test name.
|
| function actualTestName(name, index) {
|
| - return index + ":" + name;
|
| + return index + ':' + name;
|
| }
|
|
|
| // Define the tasks based on the entries in testSet.
|
| function defineAuditTests() {
|
| - for (var k = 0; k < testSet.length; ++k) {
|
| + for (let k = 0; k < testSet.length; ++k) {
|
| let {name, sampleRate, bigWave, smallWave, verifier} = testSet[k];
|
| - let actualName = actualTestName(name, k);
|
| - audit.define(actualName,
|
| - createAuditTestFunction(sampleRate, bigWave, smallWave, verifier));
|
| + let actualName = actualTestName(name, k);
|
| + audit.define(
|
| + actualName,
|
| + createAuditTestFunction(
|
| + sampleRate, bigWave, smallWave, verifier));
|
| }
|
| }
|
|
|
|
|