以下方法适用于Chrome,但在Firefox 30& 31,即使我用src.start(startTime)
替换src.start(0)
。 但是,如果我设置断点并手动调用src.start(0)
,则播放声音。我错过了什么?没有错误。
this.play = function (soundName, waitTime, callbackEnd, callbackStart) {
//plays sound now or at specific time
var ctxt = manager.context;
if (typeof waitTime === 'undefined') waitTime = 0;
var src = ctxt.createBufferSource();
src.buffer = manager.buffers[soundName];
src.onended = callbackEnd;
src.connect(ctxt.destination);
var startTime = ctxt.currentTime + waitTime;
src.start(startTime);
if (typeof callbackStart !== 'undefined') {
window.setTimeout(callbackStart, waitTime*1000);
}
//return when the sound will start (seconds)
return startTime;
};
问题似乎是在页面执行的早期,Backbone.model.fetch()用于同步模式。 Firefox警告同步ajax弃用后,它拒绝播放音频。
在GitHub上发现了这个相关问题:https://github.com/bp74/StageXL/issues/52
在Chrome& FF: http://jsbin.com/loburu/8/edit?js,output
答案 0 :(得分:1)
这适用于使用和不使用async: false
选项的最后一个Firefox(每晚)。
答案 1 :(得分:0)
看起来这是Firefox 30和31的怪癖 - 如果您计划通过Web Audio API播放任何音频,请避免使用同步ajax(您应该采取任何方式)。但是,正如@padenot所提到的,这个bug似乎在将来的版本中得到修复。