Skip to content

Instantly share code, notes, and snippets.

@jminuscula
Last active August 29, 2015 14:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jminuscula/8a8621e47e345dd18467 to your computer and use it in GitHub Desktop.
Save jminuscula/8a8621e47e345dd18467 to your computer and use it in GitHub Desktop.
Javascript load and play audio files
function TrackManager(trackFiles, onloadCallback){
var audioContext,
tracks = {},
loadedTracks = [];
window.AudioContext = window.AudioContext||window.webkitAudioContext;
audio_context = new AudioContext();
function load_track(name, url){
var request = new XMLHttpRequest();
request.open('GET', url, true);
request.responseType = 'arraybuffer';
request.onload = function(e) {
initSound(name, e.target.response);
console.log('loaded track ' + name);
loadedTracks.push(trackName);
if (loadedTracks.length === trackFiles.length) {
return onloadCallback();
}
};
request.send();
}
function initSound(trackName, arrayBuffer) {
audio_context.decodeAudioData(arrayBuffer, function(buffer) {
tracks[trackName] = buffer;
}, function(e) {
console.log('Error decoding', e);
});
}
for (trackName in trackFiles) {
loadTrack(trackName, trackFiles[trackName]);
}
this.playTrack = function(trackName){
var source;
if (loadedTracks.indexOf(trackName) === -1) {
return false;
}
source = audio_context.createBufferSource();
source.buffer = tracks[trackName];
source.loop = false;
source.connect(audio_context.destination);
source.noteOn(0);
return source;
}
}
var sound,
tracks = {
track1: 'media/audio/track1.m4a',
track2: 'media/audio/track2.m4a',
track3: 'media/audio/track3.m4a'
};
function allTracksLoaded(){
console.log('all tracks loaded');
track = sound.playTrack('track1');
track.stop();
}
sound = new TrackManager(tracks, allTracksLoaded);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment