<!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 setTargetAtTime() functionality.");

// Play a long DC signal out through an AudioGainNode, and call setValueAtTime() and
// setTargetAtTime at regular intervals to set the starting value and the target
// value. Each time interval has a ramp with a different starting and target 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 = 2.79e-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 approach starting at |startTime| with a target value of |value|.
function automation(value, startTime, endTime)
{
    // endTime is not used for setTargetAtTime.
    gainNode.gain.setTargetAtTime(value, startTime, timeConstant)
}

function runTest()
{
    createAudioGraphAndTest(numberOfTests,
                            initialValue,
                            setValue,
                            automation,
                            "setTargetAtTime()",
                            maxAllowedError,
                            createExponentialApproachArray);
}

runTest();
successfullyParsed = true;

</script>

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