<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <script src="resources/audio-testing.js"></script>
    <script src="resources/audioparam-testing-legacy.js"></script>
    <script src="../resources/js-test-pre.js"></script>
  </head>

  <body>
    <div id="description"></div>
    <div id="console"></div>

    <script>
      description("Test AudioParam exponentialRampToValueAtTime() functionality.");

      // Play a long DC signal out through an AudioGainNode, and call setValueAtTime() and
      // exponentialRampToValueAtTime() at regular intervals to set the starting and ending values
      // for an exponential ramp.  Each time interval has a ramp with a different starting and
      // ending value so that there is a discontinuity at each time interval boundary.  The
      // discontinuity is for testing timing.  Also, we alternate between an increasing and
      // decreasing ramp for each interval.

      // Number of tests to run.
      var numberOfTests = 100;

      // Max allowed difference between the rendered data and the expected result.
      var maxAllowedError = 6.75e-4;

      // The AudioGainNode starts with this value instead of the default value.
      var initialValue = 100;

      // Set the gain node value to the specified value at the specified time.
      function setValue(value, time)
      {
          gainNode.gain.setValueAtTime(value, time);
      }

      // Generate an exponential ramp ending at time |endTime| with an ending value of |value|.
      function generateRamp(value, startTime, endTime)
      {
          // |startTime| is ignored because the exponential ramp
          // uses the value from the setValueAtTime() call above.
          gainNode.gain.exponentialRampToValueAtTime(value, endTime)
      }
      
      function runTest()
      {
          createAudioGraphAndTest(numberOfTests,
                                  initialValue,
                                  setValue,
                                  generateRamp,
                                  "exponentialRampToValueAtTime()",
                                  maxAllowedError,
                                  createExponentialRampArray);

      }

      runTest();
      successfullyParsed = true;
      
    </script>

    <script src="../resources/js-test-post.js"></script>
  </body>
</html>
