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