content/media/webaudio/test/test_mediaElementAudioSourceNode.html

branch
TOR_BUG_9701
changeset 15
b8a032363ba2
equal deleted inserted replaced
-1:000000000000 0:b2eab74511d4
1 <!DOCTYPE HTML>
2 <html>
3 <meta charset="utf-8">
4 <head>
5 <title>Test MediaElementAudioSourceNode</title>
6 <script type="text/javascript" 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 node = context.createMediaElementSource(audio);
18 var sp = context.createScriptProcessor(2048, 1);
19 node.connect(sp);
20 var expectedMinNonzeroSampleCount;
21 var expectedMaxNonzeroSampleCount;
22 var nonzeroSampleCount = 0;
23 var complete = false;
24 var iterationCount = 0;
25
26 // This test ensures we receive at least expectedSampleCount nonzero samples
27 function processSamples(e) {
28 if (complete) {
29 return;
30 }
31
32 if (iterationCount == 0) {
33 // Don't start playing the audio until the AudioContext stuff is connected
34 // and running.
35 audio.play();
36 }
37 ++iterationCount;
38
39 var buf = e.inputBuffer.getChannelData(0);
40 var nonzeroSamplesThisBuffer = 0;
41 for (var i = 0; i < buf.length; ++i) {
42 if (buf[i] != 0) {
43 ++nonzeroSamplesThisBuffer;
44 }
45 }
46 nonzeroSampleCount += nonzeroSamplesThisBuffer;
47 is(e.inputBuffer.numberOfChannels, 1,
48 "Checking data channel count (nonzeroSamplesThisBuffer=" +
49 nonzeroSamplesThisBuffer + ")");
50 ok(nonzeroSampleCount <= expectedMaxNonzeroSampleCount,
51 "Too many nonzero samples (got " + nonzeroSampleCount + ", expected max " + expectedMaxNonzeroSampleCount + ")");
52 if (nonzeroSampleCount >= expectedMinNonzeroSampleCount &&
53 nonzeroSamplesThisBuffer == 0) {
54 ok(true,
55 "Check received enough nonzero samples (got " + nonzeroSampleCount + ", expected min " + expectedMinNonzeroSampleCount + ")");
56 SimpleTest.finish();
57 complete = true;
58 }
59 }
60
61 audio.oncanplaythrough = function() {
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>

mercurial