The below method works as written in Chrome, but not at all in Firefox 30 & 31, even when I replace src.start(startTime) with src.start(0). However, if I set a breakpoint and manually call src.start(0), the sound plays. What am I missing? No errors are thrown.
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;
};
Update
The issue appears to be that earlier in page execution, Backbone.model.fetch() is used in synchronous mode. After Firefox warns about synchronous ajax deprecation, it refuses to play audio.
Update 2
Test-Case