mirror of
https://github.com/doublespeakgames/adarkroom.git
synced 2026-06-08 21:47:13 +08:00
add button to turn volume on and off
This commit is contained in:
+39
-19
@@ -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
@@ -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');
|
||||||
|
|||||||
Reference in New Issue
Block a user