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

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