function BufferLoader(context, urlList, callback) { this.context = context; this.urlList = urlList; this.onload = callback; this.bufferList = new Array(); this.loadCount = 0; } BufferLoader.prototype.loadBuffer = function(url, index) { // Load buffer asynchronously let request = new XMLHttpRequest(); request.open('GET', url, true); request.responseType = 'arraybuffer'; let loader = this; request.onload = function() { loader.context.decodeAudioData( request.response, function(decodedAudio) { try { loader.bufferList[index] = decodedAudio; if (++loader.loadCount == loader.urlList.length) loader.onload(loader.bufferList); } catch (e) { console.log(e); alert( 'BufferLoader: unable to load buffer ' + index + ', url: ' + loader.urlList[index]); } }, function() { alert('error decoding file data: ' + url); }); } request.onerror = function() { alert('BufferLoader: XHR error'); } request.send(); } BufferLoader.prototype.load = function() { for (let i = 0; i < this.urlList.length; ++i) this.loadBuffer(this.urlList[i], i); }