从一系列位置名称中一次加载和播放多个文件


window.onload = init;
var list = new Array(); //array containing list of music sources
var playListBuffer = new Array(); //array to put in all decoded audio
var playList = new Array();
var context = new webkitAudioContext();
function init(){
    list = ["../media/cello_suit.mp3","../media/morning.mp3"]; //list of files to play at once
    load(list);
}
function load(url){
    for (var i=0; i<list.length; i++){ //load in every url
        var request = new XMLHttpRequest();
        request.open('GET', list[i], true);
        request.responseType = 'arraybuffer';
        request.onload = function () { //Async method
                console.log(request.response);
                context.decodeAudioData(request.response, function(buffer) {    //Async method
                    if (!buffer) {
                        alert('error decoding file data: ');
                        return;
                    }
                    playListBuffer.push(buffer);                                //Decode audio and put inside playListBuffer
                    if (list.length==playListBuffer.length){
                        console.log(playListBuffer);                            //When All files have been decoded show an Array in console
                        prepare();
                    }
                                                                        },  function(e) { console.log('Error decoding audio file', e)});
        };
        request.onerror = function() {
            alert('BufferLoader: XHR error');
        }
        request.send();
    }
}
function prepare(){
    for (var i=0; i<playListBuffer.length; i++){ 
        var source = context.createBufferSource();              // creates a sound source
        console.log(playListBuffer[i]);
        source.buffer = playListBuffer[i];                      // tell the source which sound to play
        source.connect(context.destination);                    // connect the source to the context's destination (the speakers)
        playList.push(source);
    }
    playAll();
}
function playAll(){
    for (var i=0; i<playList.length; i++){ 
        playList[i].noteOn(0); 
    }
}

hi;我在此基本脚本上使用新的Webaudio API有一些条纹行为。此脚本在Chrome中出现错误:未接收错误:Syntax_err:DOM异常12 AUDIO.JS:27request.onload;但是,如果我删除列表中的第二个元素,则可以工作。为什么?

背景信息:此脚本阅读一系列歌曲位置并同时播放它们。

您需要使用'this',因为变量'请求'将在for loop的第二次迭代中覆盖。

context.decodeAudioData(request.response,
  // ---->
context.decodeAudioData(this.response,

最新更新