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