From f6b7a35a32be72a94981ecf0a701273168eb2cb9 Mon Sep 17 00:00:00 2001 From: jorsi Date: Mon, 8 Jun 2020 22:56:05 -0400 Subject: [PATCH] fix audio context resuming for browsers with no autoplay policy --- script/audio.js | 28 +++++++++------------------- script/engine.js | 16 +++++++++++----- 2 files changed, 20 insertions(+), 24 deletions(-) diff --git a/script/audio.js b/script/audio.js index 2de373a..8c3f9f8 100644 --- a/script/audio.js +++ b/script/audio.js @@ -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) { diff --git a/script/engine.js b/script/engine.js index ed7053c..228e249 100644 --- a/script/engine.js +++ b/script/engine.js @@ -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 ) ); },