initial start for audio support

This commit is contained in:
jorsi
2020-05-28 19:10:09 -04:00
parent f74515f06d
commit 9ae328d49b
4 changed files with 49 additions and 0 deletions
BIN
View File
Binary file not shown.
+1
View File
@@ -48,6 +48,7 @@
</script>
<script src="script/Button.js"></script>
<script src="script/audio.js"></script>
<script src="script/engine.js"></script>
<script src="script/state_manager.js"></script>
<script src="script/header.js"></script>
+47
View File
@@ -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];
});
});
}
}
};
+1
View File
@@ -200,6 +200,7 @@
$.Dispatch('stateUpdate').subscribe(Engine.handleStateUpdates);
$SM.init();
AudioEngine.init();
Notifications.init();
Events.init();
Room.init();