Skip to content

Commit 894b1e9

Browse files
authored
Merge pull request goldfire#1106 from alvov/issue928
Fix: Sounds stop playing after context is interrupted (fixes goldfire#928)
2 parents e580f8e + 67cd6ce commit 894b1e9

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
@@ -482,14 +482,19 @@
482482

483483
self._suspendTimer = null;
484484
self.state = 'suspending';
485-
self.ctx.suspend().then(function() {
485+
486+
var handleSuspension = function() {
486487
self.state = 'suspended';
487488

488489
if (self._resumeAfterSuspend) {
489490
delete self._resumeAfterSuspend;
490491
self._autoResume();
491492
}
492-
});
493+
};
494+
495+
// Either suspension is resolved or rejected (i.e. in case of interrupted state of audio context)
496+
// the Howler's 'suspending' state needs to be updated.
497+
self.ctx.suspend().then(handleSuspension, handleSuspension);
493498
}, 30000);
494499

495500
return self;
@@ -506,10 +511,10 @@
506511
return;
507512
}
508513

509-
if (self.state === 'running' && self._suspendTimer) {
514+
if (self.state === 'running' && self.ctx.state !== 'interrupted' && self._suspendTimer) {
510515
clearTimeout(self._suspendTimer);
511516
self._suspendTimer = null;
512-
} else if (self.state === 'suspended') {
517+
} else if (self.state === 'suspended' || self.state === 'running' && self.ctx.state === 'interrupted') {
513518
self.ctx.resume().then(function() {
514519
self.state = 'running';
515520

@@ -868,7 +873,7 @@
868873
}
869874
};
870875

871-
if (Howler.state === 'running') {
876+
if (Howler.state === 'running' && Howler.ctx.state !== 'interrupted') {
872877
playWebAudio();
873878
} else {
874879
self._playLock = true;

0 commit comments

Comments
 (0)