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

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

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

// Play a long DC signal out through an AudioGainNode, and call setValueAtTime() at regular
// intervals to set the value for the duration of the interval.  Each time interval has
// different value so that there is a discontinuity at each time interval boundary.  The
// discontinuity is for testing timing.

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

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

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

// For testing setValueAtTime(), we don't need to do anything for automation. because the value at
// the beginning of the interval is set by setValue and it remains constant for the duration, which
// is what we want.
function automation(value, startTime, endTime)
{
    // Do nothing.
}

function runTest()
{
    createAudioGraphAndTest(numberOfTests,
                            1,
                            setValue,
                            automation,
                            "setValueAtTime()",
                            maxAllowedError,
                            createConstantArray);
}

runTest();
successfullyParsed = true;

</script>

</body>
</html>
