blob: 58c66998e5a7721bc6f7cb459fd0d65837194ad3 [file] [log] [blame]
// Test MediaStreamAudioSourceNode's with different URLs.
//
var context = 0;
var lengthInSeconds = 1;
var sampleRate = 44100;
var source = 0;
var audio = 0;
var spn = 0;
// Create an MediaElementSource node with the given |url| and connect it to webaudio.
// |oncomplete| is given the completion event to check the result.
function runTest (url, oncomplete, tester)
{
if (window.testRunner) {
testRunner.dumpAsText();
testRunner.waitUntilDone();
}
window.jsTestIsAsync = true;
context = new AudioContext();
context.suspend();
audio = document.createElement('audio');
audio.autoplay = true;
source = context.createMediaElementSource(audio);
spn = context.createScriptProcessor(16384, 1, 1);
source.connect(spn).connect(context.destination);
// Note: In practice this is not a reliable way to ensure the media element
// is ready to provide samples; unfortunately if the element is not ready
// yet, the offline context may produce silence in a spin-loop.
//
// With some knowledge of the internals we can make this test work by
// marking the element as autoplay above; this mostly ensures that the
// pipeline is ready to provide samples.
audio.addEventListener("playing", function(e) {
// If we receive multiple playing events, we still can't invoke
// startRendering multiple times.
context.resume().then(() => {
spn.onaudioprocess = function(e) {
checkResult(e.inputBuffer);
// Stop the context so we don't keep getting called anymore.
context.close();
finishJSTest();
}
});
});
if (tester) {
tester();
} else {
audio.src = url;
}
}