chromium/third_party/blink/web_tests/webaudio/resources/buffer-loader.js

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);
}