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();
},
_initAudioContext: function () {
// for legacy browsers
AudioEngine._audioContext = new (window.AudioContext || window.webkitAudioContext);
if (AudioEngine._audioContext.state === 'suspended') {
AudioEngine._audioContext.resume().then(function () {
AudioEngine._createMasterChannel();
});
} else {
AudioEngine._createMasterChannel();
}
AudioEngine._createMasterChannel();
},
_createMasterChannel: function () {
// create master
@@ -29,12 +22,6 @@ var AudioEngine = {
AudioEngine._master.gain.setValueAtTime(1.0, AudioEngine._audioContext.currentTime);
AudioEngine._master.connect(AudioEngine._audioContext.destination);
},
_canPlayAudio: function () {
if (AudioEngine._audioContext.state === 'suspended') {
return false;
}
return true;
},
_getMissingAudioBuffer: function () {
// plays beeping sound to indicate missing audio
var buffer = AudioEngine._audioContext.createBuffer(
@@ -50,7 +37,6 @@ var AudioEngine = {
return buffer;
},
_playSound: function (buffer) {
if (!AudioEngine._canPlayAudio()) return;
if (AudioEngine._currentSoundEffectAudio &&
AudioEngine._currentSoundEffectAudio.source.buffer == buffer) {
return;
@@ -74,8 +60,6 @@ var AudioEngine = {
};
},
_playBackgroundMusic: function (buffer) {
if (!AudioEngine._canPlayAudio()) return;
var source = AudioEngine._audioContext.createBufferSource();
source.buffer = buffer;
source.loop = true;
@@ -107,8 +91,6 @@ var AudioEngine = {
};
},
_playEventMusic: function (buffer) {
if (!AudioEngine._canPlayAudio()) return;
var source = AudioEngine._audioContext.createBufferSource();
source.buffer = buffer;
source.loop = true;
@@ -157,6 +139,14 @@ var AudioEngine = {
AudioEngine._currentBackgroundMusic.envelope.gain.setValueAtTime(currentBackgroundGainValue, AudioEngine._audioContext.currentTime);
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) {
AudioEngine.loadAudioFile(src)
.then(function (buffer) {
+11 -5
View File
@@ -220,6 +220,7 @@
Events.init();
Room.init();
if(typeof $SM.get('stores.wood') != 'undefined') {
Outside.init();
}
@@ -230,10 +231,6 @@
Ship.init();
}
if(!$SM.get('config.soundOn')){
Engine.toggleVolume();
}
if($SM.get('config.lightsOff', true)){
Engine.turnLightsOff();
}
@@ -242,11 +239,20 @@
Engine.triggerHyperMode();
}
if(!AudioEngine.isAudioContextRunning()){
Engine.toggleVolume();
document.addEventListener('click', Engine.resumeAudioContext);
}
Engine.saveLanguage();
Engine.travelTo(Room);
},
resumeAudioContext: function () {
AudioEngine.tryResumingAudioContext();
Engine.toggleVolume();
document.removeEventListener('click', Engine.resumeAudioContext);
},
browserValid: function() {
return ( location.search.indexOf( 'ignorebrowser=true' ) >= 0 || ( typeof Storage != 'undefined' && !oldIE ) );
},