<!DOCTYPE html>
<html>
  <head>
    <title>
      audiobuffersource-detune-modulation.html
    </title>
    <script src="../../imported/w3c/web-platform-tests/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/audiobuffersource-testing.js"></script>
    <script src="../resources/buffer-loader.js"></script>
    <script src="../resources/audio-file-utils.js"></script>
  </head>
  <body>
    <script id="layout-test-code">
      let sampleRate = 44100;
      let duration = 0.25;

      let context =
          new OfflineAudioContext(1, sampleRate * duration, sampleRate);
      let referenceBuffer;
      let audioBufferResult;

      let audit = Audit.createTaskRunner();

      // Task: Load the reference file asynchronously. In order to create a new
      // reference file, use the task 'generate-reference' below.
      audit.define('load-reference', (task, should) => {
        let loader = new BufferLoader(
            context, ['resources/audiobuffersource-detune-modulation-expected.wav'],
            function(bufferList) {
              referenceBuffer = bufferList[0];
              task.done();
            });

        loader.load();
      });


      // Task: Render the actual buffer and compare with the reference.
      audit.define('generate-verify', (task, should) => {

        // With this setting, the detune will be changing continuously and
        // repeatedly within the range of [-1200, 1200] around 440Hz, based on
        // the input from the oscillator.
        createSawtoothWithModulation(context, 'detune', 440, 1200);

        context.startRendering()
            .then(function(renderedBuffer) {
              audioBufferResult = renderedBuffer;
              let actual = renderedBuffer.getChannelData(0);
              let expected = referenceBuffer.getChannelData(0);

              // Compare two buffers with arbitrary (yet reasonable)
              // constraints. There parameters are determined by try bot
              // experiments.
              compareBuffersWithConstraints(should, actual, expected, {
                prefix: '',
                thresholdSNR: 93.320,
                thresholdDiffULP: 1.0352,
                thresholdDiffCount: 0,
                bitDepth: 16
              });

              let filename = 'resources/audiobuffersource-detune-modulation-actual.wav';
              if (downloadAudioBuffer(renderedBuffer, filename))
                should(true, 'Saved reference file').message(filename, '');
            })
            .then(() => task.done());
      });

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