tor-browser

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

test_mediaElementAudioSourceNode.html (2481B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <meta charset="utf-8">
      4 <head>
      5  <title>Test MediaElementAudioSourceNode</title>
      6  <script src="/tests/SimpleTest/SimpleTest.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 SimpleTest.waitForExplicitFinish();
     13 
     14 function test() {
     15  var audio = new Audio("small-shot.ogg");
     16  var context = new AudioContext();
     17  var expectedMinNonzeroSampleCount;
     18  var expectedMaxNonzeroSampleCount;
     19  var nonzeroSampleCount = 0;
     20  var complete = false;
     21  var iterationCount = 0;
     22 
     23  // This test ensures we receive at least expectedSampleCount nonzero samples
     24  function processSamples(e) {
     25    if (complete) {
     26      return;
     27    }
     28 
     29    if (iterationCount == 0) {
     30      // Don't start playing the audio until the AudioContext stuff is connected
     31      // and running.
     32      audio.play();
     33    }
     34    ++iterationCount;
     35 
     36    var buf = e.inputBuffer.getChannelData(0);
     37    var nonzeroSamplesThisBuffer = 0;
     38    for (var i = 0; i < buf.length; ++i) {
     39      if (buf[i] != 0) {
     40        ++nonzeroSamplesThisBuffer;
     41      }
     42    }
     43    nonzeroSampleCount += nonzeroSamplesThisBuffer;
     44    is(e.inputBuffer.numberOfChannels, 1,
     45       "Checking data channel count (nonzeroSamplesThisBuffer=" +
     46       nonzeroSamplesThisBuffer + ")");
     47    ok(nonzeroSampleCount <= expectedMaxNonzeroSampleCount,
     48       "Too many nonzero samples (got " + nonzeroSampleCount + ", expected max " + expectedMaxNonzeroSampleCount + ")");
     49    if (nonzeroSampleCount >= expectedMinNonzeroSampleCount &&
     50        nonzeroSamplesThisBuffer == 0) {
     51      ok(true,
     52       "Check received enough nonzero samples (got " + nonzeroSampleCount + ", expected min " + expectedMinNonzeroSampleCount + ")");
     53      SimpleTest.finish();
     54      complete = true;
     55    }
     56  }
     57 
     58  audio.onloadedmetadata = function() {
     59    var node = new MediaElementAudioSourceNode(context, { mediaElement: audio });
     60    var sp = context.createScriptProcessor(2048, 1);
     61    node.connect(sp);
     62    // Use a fuzz factor of 100 to account for samples that just happen to be zero
     63    expectedMinNonzeroSampleCount = Math.floor(audio.duration*context.sampleRate) - 100;
     64    expectedMaxNonzeroSampleCount = Math.floor(audio.duration*context.sampleRate) + 500;
     65    sp.onaudioprocess = processSamples;
     66  };
     67 }
     68 
     69 SpecialPowers.pushPrefEnv({"set": [["media.preload.default", 2], ["media.preload.auto", 3]]}, test);
     70 
     71 </script>
     72 </pre>
     73 </body>
     74 </html>