Firefox Web Audio:source.start()被无关的同步ajax调用打破

时间:2014-07-30 02:50:24

标签: ajax google-chrome debugging firefox web-audio

以下方法适用于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弃用后,它拒绝播放音频。

更新2

在GitHub上发现了这个相关问题:https://github.com/bp74/StageXL/issues/52

测试用例

在Chrome& FF: http://jsbin.com/loburu/8/edit?js,output

2 个答案:

答案 0 :(得分:1)

这适用于使用和不使用async: false选项的最后一个Firefox(每晚)。

答案 1 :(得分:0)

看起来这是Firefox 30和31的怪癖 - 如果您计划通过Web Audio API播放任何音频,请避免使用同步ajax(您应该采取任何方式)。但是,正如@padenot所提到的,这个bug似乎在将来的版本中得到修复。