test_convolverNodeFiniteInfluence.html (1545B)
1 <!DOCTYPE html> 2 <title>Test convolution effect has finite duration</title> 3 <script src="/resources/testharness.js"></script> 4 <script src="/resources/testharnessreport.js"></script> 5 <script> 6 promise_test(function() { 7 8 const responseLength = 256; 9 // Accept an influence period of twice the responseLength to accept FFT 10 // implementations. 11 const tolerancePeriod = 2 * responseLength; 12 const totalSize = tolerancePeriod + responseLength; 13 14 var context = new OfflineAudioContext(1, totalSize, 48000); 15 16 var responseBuffer = 17 context.createBuffer(1, responseLength, context.sampleRate); 18 var responseChannelData = responseBuffer.getChannelData(0); 19 responseChannelData[0] = 1; 20 responseChannelData[responseLength - 1] = 1; 21 var convolver = context.createConvolver(); 22 convolver.buffer = responseBuffer; 23 convolver.connect(context.destination); 24 25 var sourceBuffer = context.createBuffer(1, totalSize, context.sampleRate); 26 sourceBuffer.getChannelData(0)[0] = NaN; 27 var source = context.createBufferSource(); 28 source.buffer = sourceBuffer; 29 source.connect(convolver); 30 source.start(); 31 32 return context.startRendering(). 33 then((buffer) => { 34 var convolverOutput = buffer.getChannelData(0); 35 // There should be no non-zeros after the tolerance period. 36 var testIndex = tolerancePeriod; 37 for (; 38 testIndex < buffer.length - 1 && convolverOutput[testIndex] == 0; 39 ++testIndex) { 40 } 41 assert_equals(convolverOutput[testIndex], 0, "output at " + testIndex); 42 }); 43 }); 44 </script>