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);
}
}
やあ; 新しい webaudio api を使用するこの基本的なスクリプトには、いくつかの動作があります。このスクリプトは、クロムでエラーをスローします: Uncaught Error: SYNTAX_ERR: DOM Exception 12 audio.js:27 request.onload; ただし、リストの2番目の要素を削除すると機能します。なんで?
背景情報: このスクリプトは曲の場所の配列を読み取り、それらを同時に再生します。