下面的方法在Chrome中可以正常工作,但在Firefox 30 &31,即使我用src.start(0)
代替src.start(startTime)
。然而,如果我设置一个断点并手动调用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弃用后,它拒绝播放音频。
<标题>更新2 h1> GitHub上发现此相关问题:https://github.com/bp74/StageXL/issues/52 <标题>测试用例试试Chrome &FF:http://jsbin.com/loburu/8/edit?js,输出
标题>标题>标题>这适用于最新版本的Firefox (Nightly),无论是否有async: false
选项
这似乎是Firefox 30和31的一个怪怪-如果您计划通过Web audio API播放任何音频,请避免同步ajax(无论如何都应该这样做)。然而,正如@padenot所提到的,这个错误似乎在未来的版本中得到修复。