fix audio context resuming for browsers with no autoplay policy

This commit is contained in:
jorsi
2020-06-08 22:56:05 -04:00
parent dafc86325d
commit f6b7a35a32
2 changed files with 20 additions and 24 deletions
+9 -19
View File
@@ -13,15 +13,8 @@ var AudioEngine = {
AudioEngine._initAudioContext(); AudioEngine._initAudioContext();
}, },
_initAudioContext: function () { _initAudioContext: function () {
// for legacy browsers
AudioEngine._audioContext = new (window.AudioContext || window.webkitAudioContext); AudioEngine._audioContext = new (window.AudioContext || window.webkitAudioContext);
if (AudioEngine._audioContext.state === 'suspended') { AudioEngine._createMasterChannel();
AudioEngine._audioContext.resume().then(function () {
AudioEngine._createMasterChannel();
});
} else {
AudioEngine._createMasterChannel();
}
}, },
_createMasterChannel: function () { _createMasterChannel: function () {
// create master // create master
@@ -29,12 +22,6 @@ var AudioEngine = {
AudioEngine._master.gain.setValueAtTime(1.0, AudioEngine._audioContext.currentTime); AudioEngine._master.gain.setValueAtTime(1.0, AudioEngine._audioContext.currentTime);
AudioEngine._master.connect(AudioEngine._audioContext.destination); AudioEngine._master.connect(AudioEngine._audioContext.destination);
}, },
_canPlayAudio: function () {
if (AudioEngine._audioContext.state === 'suspended') {
return false;
}
return true;
},
_getMissingAudioBuffer: function () { _getMissingAudioBuffer: function () {
// plays beeping sound to indicate missing audio // plays beeping sound to indicate missing audio
var buffer = AudioEngine._audioContext.createBuffer( var buffer = AudioEngine._audioContext.createBuffer(
@@ -50,7 +37,6 @@ var AudioEngine = {
return buffer; return buffer;
}, },
_playSound: function (buffer) { _playSound: function (buffer) {
if (!AudioEngine._canPlayAudio()) return;
if (AudioEngine._currentSoundEffectAudio && if (AudioEngine._currentSoundEffectAudio &&
AudioEngine._currentSoundEffectAudio.source.buffer == buffer) { AudioEngine._currentSoundEffectAudio.source.buffer == buffer) {
return; return;
@@ -74,8 +60,6 @@ var AudioEngine = {
}; };
}, },
_playBackgroundMusic: function (buffer) { _playBackgroundMusic: function (buffer) {
if (!AudioEngine._canPlayAudio()) return;
var source = AudioEngine._audioContext.createBufferSource(); var source = AudioEngine._audioContext.createBufferSource();
source.buffer = buffer; source.buffer = buffer;
source.loop = true; source.loop = true;
@@ -107,8 +91,6 @@ var AudioEngine = {
}; };
}, },
_playEventMusic: function (buffer) { _playEventMusic: function (buffer) {
if (!AudioEngine._canPlayAudio()) return;
var source = AudioEngine._audioContext.createBufferSource(); var source = AudioEngine._audioContext.createBufferSource();
source.buffer = buffer; source.buffer = buffer;
source.loop = true; source.loop = true;
@@ -157,6 +139,14 @@ var AudioEngine = {
AudioEngine._currentBackgroundMusic.envelope.gain.setValueAtTime(currentBackgroundGainValue, AudioEngine._audioContext.currentTime); AudioEngine._currentBackgroundMusic.envelope.gain.setValueAtTime(currentBackgroundGainValue, AudioEngine._audioContext.currentTime);
AudioEngine._currentBackgroundMusic.envelope.gain.linearRampToValueAtTime(1.0, fadeTime); AudioEngine._currentBackgroundMusic.envelope.gain.linearRampToValueAtTime(1.0, fadeTime);
}, },
isAudioContextRunning: function () {
return AudioEngine._audioContext.state !== 'suspended';
},
tryResumingAudioContext: function() {
if (AudioEngine._audioContext.state === 'suspended') {
AudioEngine._audioContext.resume();
}
},
playBackgroundMusic: function (src) { playBackgroundMusic: function (src) {
AudioEngine.loadAudioFile(src) AudioEngine.loadAudioFile(src)
.then(function (buffer) { .then(function (buffer) {
+11 -5
View File
@@ -220,6 +220,7 @@
Events.init(); Events.init();
Room.init(); Room.init();
if(typeof $SM.get('stores.wood') != 'undefined') { if(typeof $SM.get('stores.wood') != 'undefined') {
Outside.init(); Outside.init();
} }
@@ -230,10 +231,6 @@
Ship.init(); Ship.init();
} }
if(!$SM.get('config.soundOn')){
Engine.toggleVolume();
}
if($SM.get('config.lightsOff', true)){ if($SM.get('config.lightsOff', true)){
Engine.turnLightsOff(); Engine.turnLightsOff();
} }
@@ -242,11 +239,20 @@
Engine.triggerHyperMode(); Engine.triggerHyperMode();
} }
if(!AudioEngine.isAudioContextRunning()){
Engine.toggleVolume();
document.addEventListener('click', Engine.resumeAudioContext);
}
Engine.saveLanguage(); Engine.saveLanguage();
Engine.travelTo(Room); Engine.travelTo(Room);
}, },
resumeAudioContext: function () {
AudioEngine.tryResumingAudioContext();
Engine.toggleVolume();
document.removeEventListener('click', Engine.resumeAudioContext);
},
browserValid: function() { browserValid: function() {
return ( location.search.indexOf( 'ignorebrowser=true' ) >= 0 || ( typeof Storage != 'undefined' && !oldIE ) ); return ( location.search.indexOf( 'ignorebrowser=true' ) >= 0 || ( typeof Storage != 'undefined' && !oldIE ) );
}, },