content/media/webaudio/test/test_mediaElementAudioSourceNode.html

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/content/media/webaudio/test/test_mediaElementAudioSourceNode.html	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,74 @@
     1.4 +<!DOCTYPE HTML>
     1.5 +<html>
     1.6 +<meta charset="utf-8">
     1.7 +<head>
     1.8 +  <title>Test MediaElementAudioSourceNode</title>
     1.9 +  <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
    1.10 +  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
    1.11 +</head>
    1.12 +<body>
    1.13 +<pre id="test">
    1.14 +<script class="testbody" type="text/javascript">
    1.15 +SimpleTest.waitForExplicitFinish();
    1.16 +
    1.17 +function test() {
    1.18 +  var audio = new Audio("small-shot.ogg");
    1.19 +  var context = new AudioContext();
    1.20 +  var node = context.createMediaElementSource(audio);
    1.21 +  var sp = context.createScriptProcessor(2048, 1);
    1.22 +  node.connect(sp);
    1.23 +  var expectedMinNonzeroSampleCount;
    1.24 +  var expectedMaxNonzeroSampleCount;
    1.25 +  var nonzeroSampleCount = 0;
    1.26 +  var complete = false;
    1.27 +  var iterationCount = 0;
    1.28 +
    1.29 +  // This test ensures we receive at least expectedSampleCount nonzero samples
    1.30 +  function processSamples(e) {
    1.31 +    if (complete) {
    1.32 +      return;
    1.33 +    }
    1.34 +
    1.35 +    if (iterationCount == 0) {
    1.36 +      // Don't start playing the audio until the AudioContext stuff is connected
    1.37 +      // and running.
    1.38 +      audio.play();
    1.39 +    }
    1.40 +    ++iterationCount;
    1.41 +
    1.42 +    var buf = e.inputBuffer.getChannelData(0);
    1.43 +    var nonzeroSamplesThisBuffer = 0;
    1.44 +    for (var i = 0; i < buf.length; ++i) {
    1.45 +      if (buf[i] != 0) {
    1.46 +        ++nonzeroSamplesThisBuffer;
    1.47 +      }
    1.48 +    }
    1.49 +    nonzeroSampleCount += nonzeroSamplesThisBuffer;
    1.50 +    is(e.inputBuffer.numberOfChannels, 1,
    1.51 +       "Checking data channel count (nonzeroSamplesThisBuffer=" +
    1.52 +       nonzeroSamplesThisBuffer + ")");
    1.53 +    ok(nonzeroSampleCount <= expectedMaxNonzeroSampleCount,
    1.54 +       "Too many nonzero samples (got " + nonzeroSampleCount + ", expected max " + expectedMaxNonzeroSampleCount + ")");
    1.55 +    if (nonzeroSampleCount >= expectedMinNonzeroSampleCount &&
    1.56 +        nonzeroSamplesThisBuffer == 0) {
    1.57 +      ok(true,
    1.58 +       "Check received enough nonzero samples (got " + nonzeroSampleCount + ", expected min " + expectedMinNonzeroSampleCount + ")");
    1.59 +      SimpleTest.finish();
    1.60 +      complete = true;
    1.61 +    }
    1.62 +  }
    1.63 +
    1.64 +  audio.oncanplaythrough = function() {
    1.65 +    // Use a fuzz factor of 100 to account for samples that just happen to be zero
    1.66 +    expectedMinNonzeroSampleCount = Math.floor(audio.duration*context.sampleRate) - 100;
    1.67 +    expectedMaxNonzeroSampleCount = Math.floor(audio.duration*context.sampleRate) + 500;
    1.68 +    sp.onaudioprocess = processSamples;
    1.69 +  };
    1.70 +}
    1.71 +
    1.72 +SpecialPowers.pushPrefEnv({"set": [["media.preload.default", 2], ["media.preload.auto", 3]]}, test);
    1.73 +
    1.74 +</script>
    1.75 +</pre>
    1.76 +</body>
    1.77 +</html>

mercurial