mirror of
https://github.com/doublespeakgames/adarkroom.git
synced 2026-05-28 00:01:54 +08:00
fix audio context resuming for browsers with no autoplay policy
This commit is contained in:
+9
-19
@@ -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
@@ -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 ) );
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user