mirror of
https://github.com/doublespeakgames/adarkroom.git
synced 2026-07-02 09:12:13 +08:00
initial start for audio support
This commit is contained in:
Binary file not shown.
@@ -48,6 +48,7 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script src="script/Button.js"></script>
|
<script src="script/Button.js"></script>
|
||||||
|
<script src="script/audio.js"></script>
|
||||||
<script src="script/engine.js"></script>
|
<script src="script/engine.js"></script>
|
||||||
<script src="script/state_manager.js"></script>
|
<script src="script/state_manager.js"></script>
|
||||||
<script src="script/header.js"></script>
|
<script src="script/header.js"></script>
|
||||||
|
|||||||
@@ -0,0 +1,47 @@
|
|||||||
|
/**
|
||||||
|
* Module that takes care of audio playback
|
||||||
|
*/
|
||||||
|
var AudioEngine = {
|
||||||
|
AUDIO_BUFFER_CACHE: {},
|
||||||
|
audioContext: null,
|
||||||
|
output: null,
|
||||||
|
init: function(options) {
|
||||||
|
// for legacy browsers
|
||||||
|
this.audioContext = new (window.AudioContext || window.webkitAudioContext);
|
||||||
|
this.output = this.audioContext.createGain();
|
||||||
|
this.output.connect(this.audioContext.destination);
|
||||||
|
},
|
||||||
|
options: {}, // Nothing for now
|
||||||
|
_playAudioBuffer: function(buffer, loop) {
|
||||||
|
var source = this.audioContext.createBufferSource();
|
||||||
|
source.buffer = buffer;
|
||||||
|
source.connect(this.output);
|
||||||
|
source.loop = loop || false;
|
||||||
|
source.start(0);
|
||||||
|
},
|
||||||
|
playSound: function(src, loop) {
|
||||||
|
var self = this;
|
||||||
|
this.loadAudioFile(src)
|
||||||
|
.then(function (buffer) {
|
||||||
|
self._playAudioBuffer(buffer, loop);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
loadAudioFile(src) {
|
||||||
|
var self = this;
|
||||||
|
if (self.AUDIO_BUFFER_CACHE[src]) {
|
||||||
|
return new Promise(function (resolve, reject) {
|
||||||
|
resolve(self.AUDIO_BUFFER_CACHE[src]);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
var request = new Request(src);
|
||||||
|
return fetch(request).then(function(response) {
|
||||||
|
return response.arrayBuffer();
|
||||||
|
}).then(function(buffer) {
|
||||||
|
return self.audioContext.decodeAudioData(buffer, function(decodedData) {
|
||||||
|
self.AUDIO_BUFFER_CACHE[src] = decodedData;
|
||||||
|
return self.AUDIO_BUFFER_CACHE[src];
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -200,6 +200,7 @@
|
|||||||
$.Dispatch('stateUpdate').subscribe(Engine.handleStateUpdates);
|
$.Dispatch('stateUpdate').subscribe(Engine.handleStateUpdates);
|
||||||
|
|
||||||
$SM.init();
|
$SM.init();
|
||||||
|
AudioEngine.init();
|
||||||
Notifications.init();
|
Notifications.init();
|
||||||
Events.init();
|
Events.init();
|
||||||
Room.init();
|
Room.init();
|
||||||
|
|||||||
Reference in New Issue
Block a user