test_delayNodeTailIncrease.html (2002B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <title>Test increasing delay of DelayNode after input finishes</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 = 100; 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 // Switch on delay at a time in the future. 52 var delayDuration = delayLength / ctx.sampleRate; 53 var delayStartTime = (delayLength - bufferSize) / ctx.sampleRate; 54 var delay = ctx.createDelay(delayDuration); 55 delay.delayTime.setValueAtTime(delayDuration, delayStartTime); 56 delay.connect(processor); 57 58 // Short signal that finishes before switching to long delay 59 var buffer = ctx.createBuffer(1, signalLength, ctx.sampleRate); 60 applySignal(buffer, 0); 61 var source = ctx.createBufferSource(); 62 source.buffer = buffer; 63 source.start(); 64 source.connect(delay); 65 }; 66 67 startTest(); 68 </script> 69 </pre> 70 </body> 71 </html>