add button to turn volume on and off

This commit is contained in:
jorsi
2020-05-30 22:20:29 -04:00
parent 1d84e5f85c
commit 8db47cecf9
2 changed files with 63 additions and 21 deletions
+39 -19
View File
@@ -15,7 +15,7 @@ var AudioEngine = {
currentBackgroundChannel: 'bg1', currentBackgroundChannel: 'bg1',
currentBackgroundAudio: null, currentBackgroundAudio: null,
currentEventAudio: null, currentEventAudio: null,
init: function(options) { init: function (options) {
// for legacy browsers // for legacy browsers
AudioEngine.audioContext = new (window.AudioContext || window.webkitAudioContext); AudioEngine.audioContext = new (window.AudioContext || window.webkitAudioContext);
audioLog('starting audio engine'); audioLog('starting audio engine');
@@ -50,14 +50,14 @@ var AudioEngine = {
AudioEngine.tracks['sfx'].gain.setValueAtTime(1.0, AudioEngine.audioContext.currentTime); AudioEngine.tracks['sfx'].gain.setValueAtTime(1.0, AudioEngine.audioContext.currentTime);
}, },
options: {}, // Nothing for now, options: {}, // Nothing for now,
_canPlayAudio: function() { _canPlayAudio: function () {
if (AudioEngine.audioContext.state === 'suspended') { if (AudioEngine.audioContext.state === 'suspended') {
audioLog('can\'t play audio'); audioLog('can\'t play audio');
return false; return false;
} }
return true; return true;
}, },
_playSound: function(buffer) { _playSound: function (buffer) {
if (!AudioEngine._canPlayAudio()) return; if (!AudioEngine._canPlayAudio()) return;
var source = AudioEngine.audioContext.createBufferSource(); var source = AudioEngine.audioContext.createBufferSource();
@@ -65,12 +65,12 @@ var AudioEngine = {
source.connect(AudioEngine.tracks['sfx']); source.connect(AudioEngine.tracks['sfx']);
source.start(AudioEngine.audioContext.currentTime); source.start(AudioEngine.audioContext.currentTime);
}, },
_fadeTrack: function(buffer) { _fadeTrack: function (buffer) {
if (!AudioEngine._canPlayAudio()) return; if (!AudioEngine._canPlayAudio()) return;
audioLog('_fadeMusic'); audioLog('_fadeMusic');
console.log(buffer); console.log(buffer);
var bufferSource = AudioEngine.audioContext.createBufferSource(); var bufferSource = AudioEngine.audioContext.createBufferSource();
bufferSource.buffer = buffer; bufferSource.buffer = buffer;
bufferSource.loop = true; bufferSource.loop = true;
@@ -83,7 +83,7 @@ var AudioEngine = {
} else { } else {
nextBackgroundChannel = 'bg1'; nextBackgroundChannel = 'bg1';
} }
// fade in new track // fade in new track
var fadeTime = AudioEngine.audioContext.currentTime + AudioEngine.FADE_TIME; var fadeTime = AudioEngine.audioContext.currentTime + AudioEngine.FADE_TIME;
bufferSource.connect(AudioEngine.tracks[nextBackgroundChannel]); bufferSource.connect(AudioEngine.tracks[nextBackgroundChannel]);
@@ -101,19 +101,19 @@ var AudioEngine = {
AudioEngine.currentBackgroundChannel = nextBackgroundChannel; AudioEngine.currentBackgroundChannel = nextBackgroundChannel;
AudioEngine.currentBackgroundAudio = bufferSource; AudioEngine.currentBackgroundAudio = bufferSource;
}, },
_playEvent: function(buffer) { _playEvent: function (buffer) {
if (!AudioEngine._canPlayAudio()) return; if (!AudioEngine._canPlayAudio()) return;
var bufferSource = AudioEngine.audioContext.createBufferSource(); var bufferSource = AudioEngine.audioContext.createBufferSource();
bufferSource.buffer = buffer; bufferSource.buffer = buffer;
bufferSource.loop = true; bufferSource.loop = true;
var fadeTime = AudioEngine.audioContext.currentTime + AudioEngine.FADE_TIME * 2; var fadeTime = AudioEngine.audioContext.currentTime + AudioEngine.FADE_TIME * 2;
// turn down background music // turn down background music
AudioEngine.tracks['bg1'].gain.linearRampToValueAtTime(0.2, fadeTime); AudioEngine.tracks['bg1'].gain.linearRampToValueAtTime(0.2, fadeTime);
AudioEngine.tracks['bg2'].gain.linearRampToValueAtTime(0.2, fadeTime); AudioEngine.tracks['bg2'].gain.linearRampToValueAtTime(0.2, fadeTime);
// fade in event music // fade in event music
bufferSource.connect(AudioEngine.tracks['events']); bufferSource.connect(AudioEngine.tracks['events']);
bufferSource.start(0); bufferSource.start(0);
@@ -122,7 +122,7 @@ var AudioEngine = {
AudioEngine.tracks['events'].gain.setValueAtTime(0.0, AudioEngine.audioContext.currentTime); AudioEngine.tracks['events'].gain.setValueAtTime(0.0, AudioEngine.audioContext.currentTime);
AudioEngine.tracks['events'].gain.linearRampToValueAtTime(1.0, fadeTime); AudioEngine.tracks['events'].gain.linearRampToValueAtTime(1.0, fadeTime);
}, },
_stopEventMusic: function() { _stopEventMusic: function () {
var fadeTime = AudioEngine.audioContext.currentTime + AudioEngine.FADE_TIME * 2; var fadeTime = AudioEngine.audioContext.currentTime + AudioEngine.FADE_TIME * 2;
// fade out event music and stop // fade out event music and stop
@@ -135,25 +135,25 @@ var AudioEngine = {
// turn up background music // turn up background music
AudioEngine.tracks[AudioEngine.currentBackgroundChannel].gain.linearRampToValueAtTime(1.0, fadeTime); AudioEngine.tracks[AudioEngine.currentBackgroundChannel].gain.linearRampToValueAtTime(1.0, fadeTime);
}, },
changeMusic: function(src) { changeMusic: function (src) {
AudioEngine.loadAudioFile(src) AudioEngine.loadAudioFile(src)
.then(function (buffer) { .then(function (buffer) {
audioLog('changeMusic: ' + src); audioLog('changeMusic: ' + src);
AudioEngine._fadeTrack(buffer); AudioEngine._fadeTrack(buffer);
}); });
}, },
playEventMusic: function(src) { playEventMusic: function (src) {
AudioEngine.loadAudioFile(src) AudioEngine.loadAudioFile(src)
.then(function (buffer) { .then(function (buffer) {
audioLog('playEventMusic: ' + src); audioLog('playEventMusic: ' + src);
AudioEngine._playEvent(buffer); AudioEngine._playEvent(buffer);
}); });
}, },
stopEventMusic: function() { stopEventMusic: function () {
audioLog('stopEventMusic'); audioLog('stopEventMusic');
AudioEngine._stopEventMusic(); AudioEngine._stopEventMusic();
}, },
playSound: function(src) { playSound: function (src) {
AudioEngine.loadAudioFile(src) AudioEngine.loadAudioFile(src)
.then(function (buffer) { .then(function (buffer) {
audioLog('playSound: ' + src); audioLog('playSound: ' + src);
@@ -167,16 +167,36 @@ var AudioEngine = {
}); });
} else { } else {
var request = new Request(src); var request = new Request(src);
return fetch(request).then(function(response) { return fetch(request).then(function (response) {
return response.arrayBuffer(); return response.arrayBuffer();
}).then(function(buffer) { }).then(function (buffer) {
return AudioEngine.audioContext.decodeAudioData(buffer, function(decodedData) { return AudioEngine.audioContext.decodeAudioData(buffer, function (decodedData) {
AudioEngine.AUDIO_BUFFER_CACHE[src] = decodedData; AudioEngine.AUDIO_BUFFER_CACHE[src] = decodedData;
return AudioEngine.AUDIO_BUFFER_CACHE[src]; return AudioEngine.AUDIO_BUFFER_CACHE[src];
}); });
}); });
} }
} },
mute: function () {
AudioEngine.master.gain.linearRampToValueAtTime(
0.0,
AudioEngine.audioContext.currentTime + AudioEngine.FADE_TIME
);
},
setVolume: function (volume) {
if (!AudioEngine.master) return; // master may not be ready yet
if (!volume) {
volume = 1.0;
}
AudioEngine.master.gain.setValueAtTime(
AudioEngine.master.gain.value,
AudioEngine.audioContext.currentTime
);
AudioEngine.master.gain.linearRampToValueAtTime(
volume,
AudioEngine.audioContext.currentTime + AudioEngine.FADE_TIME / 2
);
}
}; };
function audioLog(message) { function audioLog(message) {
+24 -2
View File
@@ -133,6 +133,12 @@
}); });
} }
$('<span>')
.addClass('volume menuBtn')
.text(_('sound off.'))
.click(Engine.toggleVolume)
.appendTo(menu);
$('<span>') $('<span>')
.addClass('appStore menuBtn') .addClass('appStore menuBtn')
.text(_('get the app.')) .text(_('get the app.'))
@@ -215,12 +221,16 @@
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();
} }
if($SM.get('config.hyperMode', true)){ if($SM.get('config.hyperMode', true)){
Engine.triggerHyperMode(); Engine.triggerHyperMode();
} }
Engine.saveLanguage(); Engine.saveLanguage();
@@ -782,6 +792,18 @@
} }
}, },
toggleVolume: function() {
if ($SM.get('config.soundOn')) {
$('.volume').text(_('sound on.'));
$SM.set('config.soundOn', false);
AudioEngine.mute();
} else {
$('.volume').text(_('sound off.'));
$SM.set('config.soundOn', true);
AudioEngine.setVolume(1.0);
}
},
setInterval: function(callback, interval, skipDouble){ setInterval: function(callback, interval, skipDouble){
if( Engine.options.doubleTime && !skipDouble ){ if( Engine.options.doubleTime && !skipDouble ){
Engine.log('Double time, cutting interval in half'); Engine.log('Double time, cutting interval in half');