Skip to content

Commit c520335

Browse files
committed
Fix: Sounds stop playing after context is interrupted (fixes #928)
1 parent ba13a59 commit c520335

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

src/howler.core.js

+10-5
Original file line numberDiff line numberDiff line change
@@ -463,14 +463,19 @@
463463

464464
self._suspendTimer = null;
465465
self.state = 'suspending';
466-
self.ctx.suspend().then(function() {
466+
467+
var handleSuspension = function() {
467468
self.state = 'suspended';
468469

469470
if (self._resumeAfterSuspend) {
470471
delete self._resumeAfterSuspend;
471472
self._autoResume();
472473
}
473-
});
474+
};
475+
476+
// Either suspension is resolved or rejected (i.e. in case of interrupted state of audio context)
477+
// the Howler's 'suspending' state needs to be updated.
478+
self.ctx.suspend().then(handleSuspension, handleSuspension);
474479
}, 30000);
475480

476481
return self;
@@ -487,10 +492,10 @@
487492
return;
488493
}
489494

490-
if (self.state === 'running' && self._suspendTimer) {
495+
if (self.state === 'running' && self.ctx.state !== 'interrupted' && self._suspendTimer) {
491496
clearTimeout(self._suspendTimer);
492497
self._suspendTimer = null;
493-
} else if (self.state === 'suspended') {
498+
} else if (self.state === 'suspended' || self.state === 'running' && self.ctx.state === 'interrupted') {
494499
self.ctx.resume().then(function() {
495500
self.state = 'running';
496501

@@ -849,7 +854,7 @@
849854
}
850855
};
851856

852-
if (Howler.state === 'running') {
857+
if (Howler.state === 'running' && Howler.ctx.state !== 'interrupted') {
853858
playWebAudio();
854859
} else {
855860
self._playLock = true;

0 commit comments

Comments
 (0)