libretime/legacy/public/js/waveformplaylist/loader.js

87 lines
1.9 KiB
JavaScript

'use strict';
var BufferLoader = function() {
}
BufferLoader.prototype.init = function(params) {
var loader = this;
loader.context = params.context;
loader.bufferList = [];
loader.loadCount = 0;
loader.defaultParams = {
};
loader.params = Object.create(params);
Object.keys(loader.defaultParams).forEach(function (key) {
if (!(key in params)) { params[key] = loader.defaultParams[key]; }
});
}
BufferLoader.prototype.requestBuffer = function(url, name) {
var loader = this,
request = new XMLHttpRequest();
request.open("GET", url, true);
request.responseType = "arraybuffer";
request.onload = function() {
loader.context.decodeAudioData(request.response, function(buffer) {
if (!buffer) {
alert('error decoding file data: '+url);
return;
}
loader.loadCount++;
loader.onAudioFileLoad(name, buffer);
if (loader.loadCount === loader.urlList.length) {
loader.onAudioFilesDone(loader.bufferList);
}
},
function(error) {
console.error('decodeAudioData error',error);
});
}
request.onerror = function(){
alert('BufferLoader: XHR error');
};
request.send();
};
BufferLoader.prototype.loadAudio = function(aUrls, callback) {
var names=[];
var paths=[];
for (var name in aUrls) {
var path = aUrls[name];
names.push(name);
paths.push(path);
}
this.urlList = paths;
var i,
length;
for (i = 0, length = paths.length; i < length; i++) {
this.requestBuffer(paths[i], names[i]);
}
}
BufferLoader.prototype.onAudioFileLoad = function(name, buffer) {
this.bufferList[name] = buffer;
}
BufferLoader.prototype.onAudioFilesDone = function(bufferList) {
var fn = this.params.onComplete;
fn(bufferList);
}