blob: 09f60e97a38e173d438a0f7dbdf73afc0cecbfc3 [file] [log] [blame]
<!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>
<title>Test AudioParam.setValueCurveAtTime</title>
</head>
<body>
<div id="description"></div>
<div id="console"></div>
<script>
description("Test AudioParam setValueCurveAtTime() functionality.");
// Play a long DC signal out through an AudioGainNode and for each time interval call
// setValueCurveAtTime() to set the values for the duration of the interval. Each curve is a sine
// wave, and we assume that the time interval is not an exact multiple of the period. This causes a
// discontinuity between time intervals which is used to test timing.
// Number of tests to run.
var numberOfTests = 20;
// Max allowed difference between the rendered data and the expected result. Because of the linear
// interpolation, the rendered curve isn't exactly the same as the reference. This value is
// experimentally determined.
var maxAllowedError = 3.7194e-6;
// The amplitude of the sine wave.
var sineAmplitude = 1;
// Frequency of the sine wave.
var freqHz = 440;
// Curve to use for setValueCurveAtTime().
var curve;
// Sets the curve data for the entire time interval.
function automation(value, startTime, endTime)
{
gainNode.gain.setValueCurveAtTime(curve, startTime, endTime - startTime);
}
function runTest()
{
// The curve of values to use.
curve = createSineWaveArray(timeInterval, freqHz, sineAmplitude, sampleRate);
createAudioGraphAndTest(numberOfTests,
sineAmplitude,
function(k) {
// Don't need to set the value.
},
automation,
"setValueCurveAtTime()",
maxAllowedError,
createReferenceSineArray,
2 * Math.PI * sineAmplitude * freqHz / sampleRate,
differenceErrorMetric);
}
runTest();
successfullyParsed = true;
</script>
</body>
</html>