<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <script src="resources/audio-testing.js"></script>
    <script src="resources/audioparam-testing.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>
