<!DOCTYPE HTML> <html> <meta charset="utf-8"> <head> <title>Test MediaElementAudioSourceNode with passthrough</title> <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> </head> <body> <pre id="test"> <script class="testbody" type="text/javascript"> SimpleTest.waitForExplicitFinish(); function test() { var audio = new Audio("small-shot.ogg"); var context = new AudioContext(); var node = context.createMediaElementSource(audio); var sp = context.createScriptProcessor(2048, 1); node.connect(sp); var nonzeroSampleCount = 0; var complete = false; var iterationCount = 0; var srcWrapped = SpecialPowers.wrap(node); ok("passThrough" in srcWrapped, "MediaElementAudioSourceNode should support the passThrough API"); srcWrapped.passThrough = true; // This test ensures we receive at least expectedSampleCount nonzero samples function processSamples(e) { if (complete) { return; } if (iterationCount == 0) { // Don't start playing the audio until the AudioContext stuff is connected // and running. audio.play(); } ++iterationCount; var buf = e.inputBuffer.getChannelData(0); var nonzeroSamplesThisBuffer = 0; for (var i = 0; i < buf.length; ++i) { if (buf[i] != 0) { ++nonzeroSamplesThisBuffer; } } nonzeroSampleCount += nonzeroSamplesThisBuffer; if (iterationCount == 10) { is(nonzeroSampleCount, 0, "The input must be silence"); SimpleTest.finish(); complete = true; } } audio.oncanplaythrough = function() { sp.onaudioprocess = processSamples; }; } SpecialPowers.pushPrefEnv({"set": [["media.preload.default", 2], ["media.preload.auto", 3]]}, test); </script> </pre> </body> </html>