|
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"> |
|
12 |
|
13 SimpleTest.waitForExplicitFinish(); |
|
14 |
|
15 const bufferSize = 4096; |
|
16 |
|
17 var ctx; |
|
18 var testDelay; |
|
19 var stereoDelay; |
|
20 var invertor; |
|
21 |
|
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 } |
|
34 |
|
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); |
|
47 |
|
48 compareOutputs( |
|
49 function () { |
|
50 // Disconnect the two-channel signal and test again |
|
51 merger.disconnect(); |
|
52 compareOutputs(SimpleTest.finish); |
|
53 }); |
|
54 } |
|
55 |
|
56 function prepareTest() { |
|
57 ctx = new AudioContext(); |
|
58 |
|
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; |
|
68 |
|
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); |
|
75 |
|
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); |
|
81 |
|
82 // Start the test after the delay nodes have begun processing. |
|
83 var processor = ctx.createScriptProcessor(bufferSize, 1, 0); |
|
84 processor.connect(ctx.destination); |
|
85 |
|
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> |