tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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>