Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firefox中的WebAudio MediaElementSourceNode_Javascript_Firefox_Web Audio Api - Fatal编程技术网

Javascript Firefox中的WebAudio MediaElementSourceNode

Javascript Firefox中的WebAudio MediaElementSourceNode,javascript,firefox,web-audio-api,Javascript,Firefox,Web Audio Api,我正在尝试使用MediaElementSourceNodes创建一个简单的WebAudio播放器。在谷歌浏览器上,Chrome可以正常工作,但在Firefox上,它第一次就可以正常工作,但当我尝试重新启动它时,它不会发出任何声音(没有错误记录)。一个解决方案是为音频元素创建新的源代码,它在Firefox上工作,但在Chrome上它给了我 Uncaught InvalidStateError:未能在“AudioContext”上执行“createMediaElementSource”:HTMLMe

我正在尝试使用MediaElementSourceNodes创建一个简单的WebAudio播放器。在谷歌浏览器上,Chrome可以正常工作,但在Firefox上,它第一次就可以正常工作,但当我尝试重新启动它时,它不会发出任何声音(没有错误记录)。一个解决方案是为音频元素创建新的源代码,它在Firefox上工作,但在Chrome上它给了我
Uncaught InvalidStateError:未能在“AudioContext”上执行“createMediaElementSource”:HTMLMediaElement以前已连接到其他MediaElementSourceNode。
另一个解决方案是创建新的Audio元素,它可以在所有浏览器上工作,但它会重新下载mp3文件,这并不理想,因为我尝试使用它两次以上。你能解释一下这种行为和可能的解决办法吗?(我使用的是Firefox开发者版48.0a2(2016-05-16))


var context=新的AudioContext();
var audio=新音频(“test.mp3”);
audio.controls=true;
var source=context.createMediaElementSource(音频);
source.connect(context.destination);
var play=document.getElementById('play')
play.onclick=函数(){
//source=context.createMediaElementSource(音频);//firefox很高兴,但chrome有bug。
//audio=new audio(“test.mp3”);//工作正常,但会重新下载音频。
音频播放();
}
var stop=document.getElementById('stop');
stop.onclick=函数(){
audio.pause();
audio.currentTime=0;
}

在停止方法中“断开”目标源,然后在播放方法中重新“连接”目标源。那会解决你的问题

<html>
    <body>
        <input type="button" value="stop" id="stop">
        <input type="button" value="play" id="play">
        <script>
            var context = new AudioContext();

            var audio = new Audio("test.mp3");
            audio.controls = true;

            var source = context.createMediaElementSource(audio);
            source.connect(context.destination);

            var play = document.getElementById('play')
            play.onclick = function () {
              //source = context.createMediaElementSource(audio); // firefox is happy, but chrome bugs.

              //audio = new Audio("test.mp3"); //works, but it redownloads the audio.

              audio.play();
            }

            var stop = document.getElementById('stop');
            stop.onclick = function () {
              audio.pause();
              audio.currentTime = 0;
            }
      </script>
    </body>
</html>