Skip to content

Commit 67cd6ce

Browse files
committed
Fix: Sounds stop playing after context is interrupted (fixes goldfire#928)
1 parent e25974d commit 67cd6ce

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

src/howler.core.js

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -466,14 +466,19 @@
466466

467467
self._suspendTimer = null;
468468
self.state = 'suspending';
469-
self.ctx.suspend().then(function() {
469+
470+
var handleSuspension = function() {
470471
self.state = 'suspended';
471472

472473
if (self._resumeAfterSuspend) {
473474
delete self._resumeAfterSuspend;
474475
self._autoResume();
475476
}
476-
});
477+
};
478+
479+
// Either suspension is resolved or rejected (i.e. in case of interrupted state of audio context)
480+
// the Howler's 'suspending' state needs to be updated.
481+
self.ctx.suspend().then(handleSuspension, handleSuspension);
477482
}, 30000);
478483

479484
return self;
@@ -490,10 +495,10 @@
490495
return;
491496
}
492497

493-
if (self.state === 'running' && self._suspendTimer) {
498+
if (self.state === 'running' && self.ctx.state !== 'interrupted' && self._suspendTimer) {
494499
clearTimeout(self._suspendTimer);
495500
self._suspendTimer = null;
496-
} else if (self.state === 'suspended') {
501+
} else if (self.state === 'suspended' || self.state === 'running' && self.ctx.state === 'interrupted') {
497502
self.ctx.resume().then(function() {
498503
self.state = 'running';
499504

@@ -851,7 +856,7 @@
851856
}
852857
};
853858

854-
if (Howler.state === 'running') {
859+
if (Howler.state === 'running' && Howler.ctx.state !== 'interrupted') {
855860
playWebAudio();
856861
} else {
857862
self._playLock = true;

0 commit comments

Comments
 (0)