<!DOCTYPE html>

<html>
<head>
<script type="text/javascript" src="resources/audio-testing.js"></script>
<script src="../resources/js-test.js"></script>
<script src="resources/convolution-testing.js"></script>
</head>

<body>

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

<script>
description("Tests ConvolverNode processing a mono channel with mono impulse response.");

// To test the convolver, we convolve two square pulses together to
// produce a triangular pulse.  To verify the result is correct we
// check several parts of the result.  First, we make sure the initial
// part of the result is zero (due to the latency in the convolver).
// Next, the triangular pulse should match the theoretical result to
// within some roundoff.  After the triangular pulse, the result
// should be exactly zero, but round-off prevents that.  We make sure
// the part after the pulse is sufficiently close to zero.  Finally,
// the result should be exactly zero because the inputs are exactly
// zero.
function runTest() {
    window.jsTestIsAsync = true;
        
    // Create offline audio context.
    var context = new webkitOfflineAudioContext(2, sampleRate * renderLengthSeconds, sampleRate);

    var squarePulse = createSquarePulseBuffer(context, pulseLengthFrames);
    var trianglePulse = createTrianglePulseBuffer(context, 2 * pulseLengthFrames);
    
    var bufferSource = context.createBufferSource();
    bufferSource.buffer = squarePulse;
    
    var convolver = context.createConvolver();
    convolver.normalize = false;
    convolver.buffer = squarePulse;

    bufferSource.connect(convolver);
    convolver.connect(context.destination);

    bufferSource.start(0);
    
    context.oncomplete = checkConvolvedResult(trianglePulse);
    context.startRendering();
}

runTest();

</script>
</body>
</html>
