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