content/media/webaudio/test/test_delayNodeTailWithGain.html

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 <!DOCTYPE HTML>
     2 <html>
     3 <head>
     4   <title>Test tail time lifetime of DelayNode indirectly connected to source</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 signalLength = 130;
    16 const bufferSize = 1024;
    17 // Delay should be long enough to allow CC to run
    18 const delayBufferCount = 50;
    19 const delayLength = delayBufferCount * bufferSize + 700;
    21 var count = 0;
    23 function applySignal(buffer, offset) {
    24   for (var i = 0; i < signalLength; ++i) {
    25     buffer.getChannelData(0)[offset + i] = Math.cos(Math.PI * i / signalLength);
    26   }
    27 }
    29 function onAudioProcess(e) {
    30   switch(count) {
    31   case 5:
    32     SpecialPowers.forceGC();
    33     SpecialPowers.forceCC();
    34     break;
    35   case delayBufferCount:
    36     var offset = delayLength - count * bufferSize;
    37     var ctx = e.target.context;
    38     var expected = ctx.createBuffer(1, bufferSize, ctx.sampleRate);
    39     applySignal(expected, offset);
    40     compareBuffers(e.inputBuffer, expected);
    41     SimpleTest.finish();
    42   }
    43   count++;
    44 }
    46 function startTest() {
    47   var ctx = new AudioContext();
    48   var processor = ctx.createScriptProcessor(bufferSize, 1, 0);
    49   processor.onaudioprocess = onAudioProcess;
    51   var delayDuration = delayLength / ctx.sampleRate;
    52   var delay = ctx.createDelay(delayDuration);
    53   delay.delayTime.value = delayDuration;
    54   delay.connect(processor);
    56   var gain = ctx.createGain();
    57   gain.connect(delay);
    59   // Short signal that finishes before garbage collection
    60   var buffer = ctx.createBuffer(1, signalLength, ctx.sampleRate);
    61   applySignal(buffer, 0);
    62   var source = ctx.createBufferSource();
    63   source.buffer = buffer;
    64   source.start();
    65   source.connect(gain);
    66 };
    68 startTest();
    69 </script>
    70 </pre>
    71 </body>
    72 </html>

mercurial