<!DOCTYPE html>
<html>
  <head>
    <title>
      convolution-mono-mono.html
    </title>
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <script src="/webaudio/resources/audit-util.js"></script>
    <script src="/webaudio/resources/audit.js"></script>
    <script src="/webaudio/resources/convolution-testing.js"></script>
  </head>
  <body>
    <script id="layout-test-code">
      let audit = Audit.createTaskRunner();

      // description("Tests ConvolverNode processing a mono channel with mono
      // impulse response.");

      // To test the convolver, we convolve two square pulses together to
      // produce a triangular pulse.  To verify the result is correct we
      // check several parts of the result.  First, we make sure the initial
      // part of the result is zero (due to the latency in the convolver).
      // Next, the triangular pulse should match the theoretical result to
      // within some roundoff.  After the triangular pulse, the result
      // should be exactly zero, but round-off prevents that.  We make sure
      // the part after the pulse is sufficiently close to zero.  Finally,
      // the result should be exactly zero because the inputs are exactly
      // zero.
      audit.define('test', function(task, should) {
        // Create offline audio context.
        let context = new OfflineAudioContext(
            2, sampleRate * renderLengthSeconds, sampleRate);

        let squarePulse = createSquarePulseBuffer(context, pulseLengthFrames);
        let trianglePulse =
            createTrianglePulseBuffer(context, 2 * pulseLengthFrames);

        let bufferSource = context.createBufferSource();
        bufferSource.buffer = squarePulse;

        let convolver = context.createConvolver();
        convolver.normalize = false;
        convolver.buffer = squarePulse;

        bufferSource.connect(convolver);
        convolver.connect(context.destination);

        bufferSource.start(0);

        context.startRendering()
            .then(buffer => {
              checkConvolvedResult(buffer, trianglePulse, should);
            })
            .then(task.done.bind(task));
        ;
      });

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