<!DOCTYPE html>
<html>
  <head>
    <title>
      panner-loop.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/panner-model-testing.js"></script>
  </head>
  <body>
    <script id="layout-test-code">
      let audit = Audit.createTaskRunner();

      // See crbug.com/331446.

      // Create a simple feedback loop and make sure the panner node processes
      // it correctly.

      audit.define(
          {label: 'test', description: 'PannerNode handling of feedback loops'},
          (task, should) => {

            let sampleRate = 44100;
            let renderLengthSeconds = 1;

            // Create offline audio context.
            let context = new OfflineAudioContext(
                2, sampleRate * renderLengthSeconds, sampleRate);

            // Create nodes in graph. This is based on the test given in
            // crbug.com/331446.
            let source = context.createBufferSource();
            source.buffer =
                createImpulseBuffer(context, sampleRate * renderLengthSeconds);
            let activateNode = context.createGain();
            let dry = context.createGain();
            let wet = context.createGain();
            let filter = context.createBiquadFilter();
            let delay = context.createDelay();
            let feedbackNode = context.createGain();
            let output = context.createGain();

            delay.delayTime.value = 0.1;
            wet.gain.value = 0.5;
            dry.gain.value = 1;
            feedbackNode.gain.value = 0.45;
            filter.frequency.value = 20000;

            source.connect(activateNode);
            activateNode.connect(delay);
            activateNode.connect(dry);
            delay.connect(filter);
            filter.connect(feedbackNode);
            feedbackNode.connect(delay);
            feedbackNode.connect(wet);
            wet.connect(output);
            dry.connect(output);

            let panner = context.createPanner();
            panner.coneOuterGain = 0.1;
            panner.coneOuterAngle = 180;
            panner.coneInnerAngle = 0;

            panner.connect(context.destination);

            output.connect(panner);

            // Render.  We don't care what the output is, though.

            should(context.startRendering(), 'Rendering of offline context')
                .beResolved()
                .then(() => task.done());
          });

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