Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

<!DOCTYPE html>
<title>Test convolution effect has finite duration</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
promise_test(function() {
const responseLength = 256;
// Accept an influence period of twice the responseLength to accept FFT
// implementations.
const tolerancePeriod = 2 * responseLength;
const totalSize = tolerancePeriod + responseLength;
var context = new OfflineAudioContext(1, totalSize, 48000);
var responseBuffer =
context.createBuffer(1, responseLength, context.sampleRate);
var responseChannelData = responseBuffer.getChannelData(0);
responseChannelData[0] = 1;
responseChannelData[responseLength - 1] = 1;
var convolver = context.createConvolver();
convolver.buffer = responseBuffer;
convolver.connect(context.destination);
var sourceBuffer = context.createBuffer(1, totalSize, context.sampleRate);
sourceBuffer.getChannelData(0)[0] = NaN;
var source = context.createBufferSource();
source.buffer = sourceBuffer;
source.connect(convolver);
source.start();
return context.startRendering().
then((buffer) => {
var convolverOutput = buffer.getChannelData(0);
// There should be no non-zeros after the tolerance period.
var testIndex = tolerancePeriod;
for (;
testIndex < buffer.length - 1 && convolverOutput[testIndex] == 0;
++testIndex) {
}
assert_equals(convolverOutput[testIndex], 0, "output at " + testIndex);
});
});
</script>