1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/content/media/webaudio/test/test_delayNodeChannelChanges.html Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,97 @@ 1.4 +<!DOCTYPE HTML> 1.5 +<html> 1.6 +<head> 1.7 + <title>test DelayNode channel count changes</title> 1.8 + <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> 1.9 + <script type="text/javascript" src="webaudio.js"></script> 1.10 + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> 1.11 +</head> 1.12 +<body> 1.13 +<pre id="test"> 1.14 +<script class="testbody" type="text/javascript"> 1.15 + 1.16 +SimpleTest.waitForExplicitFinish(); 1.17 + 1.18 +const bufferSize = 4096; 1.19 + 1.20 +var ctx; 1.21 +var testDelay; 1.22 +var stereoDelay; 1.23 +var invertor; 1.24 + 1.25 +function compareOutputs(callback) { 1.26 + var processor = ctx.createScriptProcessor(bufferSize, 2, 0); 1.27 + testDelay.connect(processor); 1.28 + invertor.connect(processor); 1.29 + processor.onaudioprocess = 1.30 + function(e) { 1.31 + compareBuffers(e.inputBuffer, 1.32 + ctx.createBuffer(2, bufferSize, ctx.sampleRate)); 1.33 + e.target.onaudioprocess = null; 1.34 + callback(); 1.35 + } 1.36 +} 1.37 + 1.38 +function startTest() { 1.39 + // And a two-channel signal 1.40 + var merger = ctx.createChannelMerger(); 1.41 + merger.connect(testDelay); 1.42 + merger.connect(stereoDelay); 1.43 + var oscL = ctx.createOscillator(); 1.44 + oscL.connect(merger, 0, 0); 1.45 + oscL.start(0); 1.46 + var oscR = ctx.createOscillator(); 1.47 + oscR.type = "sawtooth"; 1.48 + oscR.connect(merger, 0, 1); 1.49 + oscR.start(0); 1.50 + 1.51 + compareOutputs( 1.52 + function () { 1.53 + // Disconnect the two-channel signal and test again 1.54 + merger.disconnect(); 1.55 + compareOutputs(SimpleTest.finish); 1.56 + }); 1.57 +} 1.58 + 1.59 +function prepareTest() { 1.60 + ctx = new AudioContext(); 1.61 + 1.62 + // The output of a test delay node with mono and stereo input will be 1.63 + // compared with that of separate mono and stereo delay nodes. 1.64 + const delayTime = 0.3 * bufferSize / ctx.sampleRate; 1.65 + testDelay = ctx.createDelay(delayTime); 1.66 + testDelay.delayTime.value = delayTime; 1.67 + monoDelay = ctx.createDelay(delayTime); 1.68 + monoDelay.delayTime.value = delayTime; 1.69 + stereoDelay = ctx.createDelay(delayTime); 1.70 + stereoDelay.delayTime.value = delayTime; 1.71 + 1.72 + // Create a one-channel signal and connect to the delay nodes 1.73 + var monoOsc = ctx.createOscillator(); 1.74 + monoOsc.frequency.value = 110; 1.75 + monoOsc.connect(testDelay); 1.76 + monoOsc.connect(monoDelay); 1.77 + monoOsc.start(0); 1.78 + 1.79 + // Invert the expected so that mixing with the test will find the difference. 1.80 + invertor = ctx.createGain(); 1.81 + invertor.gain.value = -1.0; 1.82 + monoDelay.connect(invertor); 1.83 + stereoDelay.connect(invertor); 1.84 + 1.85 + // Start the test after the delay nodes have begun processing. 1.86 + var processor = ctx.createScriptProcessor(bufferSize, 1, 0); 1.87 + processor.connect(ctx.destination); 1.88 + 1.89 + processor.onaudioprocess = 1.90 + function(e) { 1.91 + e.target.onaudioprocess = null; 1.92 + processor.disconnect(); 1.93 + startTest(); 1.94 + }; 1.95 +} 1.96 +prepareTest(); 1.97 +</script> 1.98 +</pre> 1.99 +</body> 1.100 +</html>