chromium/third_party/blink/web_tests/webaudio/test-basic.html

<!DOCTYPE html>
<!--
This is a very basic test to make sure testRunner.setAudioData() works correctly.
It generates a 2 seconds long stereo result @44.1KHz
The left channel will be a 880Hz tone, while the right will be 440Hz.
-->
<html>
  <head>
    <title>
      test-basic.html
    </title>
    <script src="../resources/testharness.js"></script>
    <script src="../resources/testharnessreport.js"></script>
    <script src="resources/audit-util.js"></script>
    <script src="resources/audit.js"></script>
    <script src="resources/audio-file-utils.js"></script>
  </head>
  <body>
    <script id="layout-test-code">
      let audit = Audit.createTaskRunner();

      let sampleRate = 44100.0;
      let lengthInSeconds = 2;

      function generateSinWave(audioBuffer) {
        let n = audioBuffer.length;
        let channelL = audioBuffer.getChannelData(0);
        let channelR = audioBuffer.getChannelData(1);
        let sampleRate = audioBuffer.sampleRate;

        for (let i = 0; i < n; ++i) {
          channelL[i] = Math.sin(880.0 * 2.0 * Math.PI * i / sampleRate);
          channelR[i] = Math.sin(440.0 * 2.0 * Math.PI * i / sampleRate);
        }
      }

      audit.define(
          {
            label: 'test',
            description:
                'Basic audio test infrastructure: testRunner.setAudioData()'
          },
          (task, should) => {
            if (!window.testRunner) {
              should(!window.testRunner, 'window.testRunner is defined')
                  .beTrue();
              task.done();
              return;
            }

            let context = new AudioContext();
            let audioBuffer = context.createBuffer(
                2, lengthInSeconds * sampleRate, sampleRate);

            generateSinWave(audioBuffer);

            let audioData = createAudioData(audioBuffer);
            testRunner.setAudioData(audioData);

            testRunner.notifyDone();
            task.done();
          });

      audit.run();
    </script>
  </body>
</html>