<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <script src="../resources/js-test.js"></script>
    <script src="resources/compatibility.js"></script>
    <script src="resources/audio-testing.js"></script>
    <script src="resources/audioparam-testing.js"></script>
    <title>Test AudioParam.exponentialRampToValueAtTime</title>
  </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 = 1.222e-5;

      // 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>

  </body>
</html>
