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>