Skip to content

Commit 3abbeed

Browse files
committed
Wait to begin playback until context has resumed (only Web Audio)
Fixes goldfire#643
1 parent 227a48f commit 3abbeed

File tree

1 file changed

+9
-2
lines changed

1 file changed

+9
-2
lines changed

src/howler.core.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,11 @@
370370
self.state = 'resuming';
371371
self.ctx.resume().then(function() {
372372
self.state = 'running';
373+
374+
// Emit to all Howls that the audio has resumed.
375+
for (var i=0; i<self._howls.length; i++) {
376+
self._howls[i]._emit('resume');
377+
}
373378
});
374379

375380
if (self._suspendTimer) {
@@ -451,6 +456,7 @@
451456
self._onvolume = o.onvolume ? [{fn: o.onvolume}] : [];
452457
self._onrate = o.onrate ? [{fn: o.onrate}] : [];
453458
self._onseek = o.onseek ? [{fn: o.onseek}] : [];
459+
self._onresume = [];
454460

455461
// Web Audio or HTML5 Audio?
456462
self._webAudio = Howler.usingWebAudio && !self._html5;
@@ -675,11 +681,12 @@
675681
}
676682
};
677683

678-
if (self._state === 'loaded') {
684+
var isRunning = (Howler.state === 'running');
685+
if (self._state === 'loaded' && isRunning) {
679686
playWebAudio();
680687
} else {
681688
// Wait for the audio to load and then begin playback.
682-
self.once('load', playWebAudio, sound._id);
689+
self.once(isRunning ? 'load' : 'resume', playWebAudio, isRunning ? sound._id : null);
683690

684691
// Cancel the end timer.
685692
self._clearTimer(sound._id);

0 commit comments

Comments
 (0)