test_delayNodeTailWithGain.html (1925B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <title>Test tail time lifetime of DelayNode indirectly connected to source</title> 5 <script src="/tests/SimpleTest/SimpleTest.js"></script> 6 <script type="text/javascript" src="webaudio.js"></script> 7 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> 8 </head> 9 <body> 10 <pre id="test"> 11 <script class="testbody" type="text/javascript"> 12 13 SimpleTest.waitForExplicitFinish(); 14 15 const signalLength = 130; 16 const bufferSize = 1024; 17 // Delay should be long enough to allow CC to run 18 const delayBufferCount = 50; 19 const delayLength = delayBufferCount * bufferSize + 700; 20 21 var count = 0; 22 23 function applySignal(buffer, offset) { 24 for (var i = 0; i < signalLength; ++i) { 25 buffer.getChannelData(0)[offset + i] = Math.cos(Math.PI * i / signalLength); 26 } 27 } 28 29 function onAudioProcess(e) { 30 switch(count) { 31 case 5: 32 SpecialPowers.forceGC(); 33 SpecialPowers.forceCC(); 34 break; 35 case delayBufferCount: 36 var offset = delayLength - count * bufferSize; 37 var ctx = e.target.context; 38 var expected = ctx.createBuffer(1, bufferSize, ctx.sampleRate); 39 applySignal(expected, offset); 40 compareBuffers(e.inputBuffer, expected); 41 SimpleTest.finish(); 42 } 43 count++; 44 } 45 46 function startTest() { 47 var ctx = new AudioContext(); 48 var processor = ctx.createScriptProcessor(bufferSize, 1, 0); 49 processor.onaudioprocess = onAudioProcess; 50 51 var delayDuration = delayLength / ctx.sampleRate; 52 var delay = ctx.createDelay(delayDuration); 53 delay.delayTime.value = delayDuration; 54 delay.connect(processor); 55 56 var gain = ctx.createGain(); 57 gain.connect(delay); 58 59 // Short signal that finishes before garbage collection 60 var buffer = ctx.createBuffer(1, signalLength, ctx.sampleRate); 61 applySignal(buffer, 0); 62 var source = ctx.createBufferSource(); 63 source.buffer = buffer; 64 source.start(); 65 source.connect(gain); 66 }; 67 68 startTest(); 69 </script> 70 </pre> 71 </body> 72 </html>