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