test_mediaStreamAudioDestinationNode.html (1652B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <title>Test MediaStreamAudioDestinationNode</title> 5 <script src="/tests/SimpleTest/SimpleTest.js"></script> 6 <script type="text/javascript" src="webaudio.js"></script> 7 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> 8 </head> 9 <body> 10 <pre id="test"> 11 <audio id="audioelem"></audio> 12 <script class="testbody" type="text/javascript"> 13 14 SimpleTest.waitForExplicitFinish(); 15 SimpleTest.requestFlakyTimeout("This test uses a live media element so it needs to wait for the media stack to do some work."); 16 addLoadEvent(function() { 17 var context = new AudioContext(); 18 var buffer = context.createBuffer(1, 2048, context.sampleRate); 19 for (var i = 0; i < 2048; ++i) { 20 buffer.getChannelData(0)[i] = Math.sin(440 * 2 * Math.PI * i / context.sampleRate); 21 } 22 23 var source = context.createBufferSource(); 24 source.buffer = buffer; 25 26 var dest = new MediaStreamAudioDestinationNode(context); 27 source.connect(dest); 28 29 var elem = document.getElementById('audioelem'); 30 elem.srcObject = dest.stream; 31 elem.onloadedmetadata = function() { 32 ok(true, "got metadata event"); 33 setTimeout(function() { 34 is(elem.played.length, 1, "should have a played interval"); 35 is(elem.played.start(0), 0, "should have played immediately"); 36 isnot(elem.played.end(0), 0, "should have played for a non-zero interval"); 37 38 // This will end the media element. 39 dest.stream.getTracks()[0].stop(); 40 }, 2000); 41 }; 42 elem.onended = function() { 43 ok(true, "media element ended after destination track.stop()"); 44 SimpleTest.finish(); 45 }; 46 47 source.start(0); 48 elem.play(); 49 }); 50 </script>