我在这里有 2 个函数: load 接收到 mp3 的路径,count 是正在加载的轨道数。当 for 循环到达最后一个轨道时,arraybufferList 包含所有歌曲的“arraybuffer”数组。然后将其传递给 loadData 函数,该函数使用 webaudioapi 函数“decodeAudioData”来解码所有信息并将所有内容放入“currentBuffer”中。然而,在关闭之外,“currentBuffer”似乎消失了(在我的谷歌浏览器调试器中)。
我正在尝试使用 wavesurfer.js 库并将其扩展到多个轨道。
load: function (src,count) {
var my = this;
var xhr = new XMLHttpRequest();
xhr.responseType = 'arraybuffer';
xhr.onload = function () {
console.log("loading mp3 & putting inside arraybufferList");
arraybufferList.push(xhr.response);
if (arraybufferList.length==count){
console.log(arraybufferList);
for (var i=0; i<arraybufferList.length; i++){
my.backend.loadData(
arraybufferList[i],
playList[i].draw.bind(playList[i])
);
console.log(playList);
//playList.push(my);
}
console.log(playList);
}
};
xhr.open('GET', src, true);
xhr.send();
},
loadData: function (audioData, cb) {
var my = this;
this.pause();
this.ac.decodeAudioData(
audioData,
function (buffer) {
my.currentBuffer = buffer;
my.lastStart = 0;
my.lastPause = 0;
my.startTime = null;
cb(buffer);
},
Error
);
},
在每个音频文件的开头创建一个对象,其中来自 loadData 的信息应该进入
var WaveSurfer = {
init: function (params) {
var my = this;
var backend = WaveSurfer.Audio;
if (!params.predrawn) {
backend = WaveSurfer.WebAudio;
}
this.backend = Object.create(backend);
this.backend.init(params);
this.drawer = Object.create(WaveSurfer.Drawer);
this.drawer.init(params);
this.backend.bindUpdate(function () {
my.onAudioProcess();
});
this.bindClick(params.canvas, function (percents) {
my.playAt(percents);
});
playList.push(my);
},
一些基本代码: ac: new (window.AudioContext || window.webkitAudioCont