test_delayNodeChannelChanges.html (2704B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <title>test DelayNode channel count changes</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 SimpleTest.requestCompleteLog(); 15 16 const bufferSize = 4096; 17 18 var ctx; 19 var testDelay; 20 var stereoDelay; 21 var invertor; 22 23 function compareOutputs(callback) { 24 var processor = ctx.createScriptProcessor(bufferSize, 2, 0); 25 testDelay.connect(processor); 26 invertor.connect(processor); 27 processor.onaudioprocess = 28 function(e) { 29 compareBuffers(e.inputBuffer, 30 ctx.createBuffer(2, bufferSize, ctx.sampleRate)); 31 e.target.onaudioprocess = null; 32 callback(); 33 } 34 } 35 36 function startTest() { 37 // And a two-channel signal 38 var merger = ctx.createChannelMerger(); 39 merger.connect(testDelay); 40 merger.connect(stereoDelay); 41 var oscL = ctx.createOscillator(); 42 oscL.connect(merger, 0, 0); 43 oscL.start(0); 44 var oscR = ctx.createOscillator(); 45 oscR.type = "sawtooth"; 46 oscR.connect(merger, 0, 1); 47 oscR.start(0); 48 49 compareOutputs( 50 function () { 51 // Disconnect the two-channel signal and test again 52 merger.disconnect(); 53 compareOutputs(SimpleTest.finish); 54 }); 55 } 56 57 function prepareTest() { 58 ctx = new AudioContext(); 59 60 // The output of a test delay node with mono and stereo input will be 61 // compared with that of separate mono and stereo delay nodes. 62 const delayTime = 0.3 * bufferSize / ctx.sampleRate; 63 testDelay = ctx.createDelay(delayTime); 64 testDelay.delayTime.value = delayTime; 65 let monoDelay = ctx.createDelay(delayTime); 66 monoDelay.delayTime.value = delayTime; 67 stereoDelay = ctx.createDelay(delayTime); 68 stereoDelay.delayTime.value = delayTime; 69 70 // Create a one-channel signal and connect to the delay nodes 71 var monoOsc = ctx.createOscillator(); 72 monoOsc.frequency.value = 110; 73 monoOsc.connect(testDelay); 74 monoOsc.connect(monoDelay); 75 monoOsc.start(0); 76 77 // Invert the expected so that mixing with the test will find the difference. 78 invertor = ctx.createGain(); 79 invertor.gain.value = -1.0; 80 monoDelay.connect(invertor); 81 stereoDelay.connect(invertor); 82 83 // Start the test after the delay nodes have begun processing. 84 var processor = ctx.createScriptProcessor(bufferSize, 1, 0); 85 processor.connect(ctx.destination); 86 87 processor.onaudioprocess = 88 function(e) { 89 e.target.onaudioprocess = null; 90 processor.disconnect(); 91 startTest(); 92 }; 93 } 94 prepareTest(); 95 </script> 96 </pre> 97 </body> 98 </html>