content/media/webaudio/test/test_delayNodeChannelChanges.html

Fri, 16 Jan 2015 04:50:19 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Fri, 16 Jan 2015 04:50:19 +0100
branch
TOR_BUG_9701
changeset 13
44a2da4a2ab2
permissions
-rw-r--r--

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>

mercurial