Firefox Web Audio: source.start()被不相关的同步ajax调用打断



下面的方法在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所提到的,这个错误似乎在未来的版本中得到修复。

最新更新