我是 JS 的新手,我一直在尝试使用 Web Audio API 实现一种混音器。我一直在阅读一些关于 JS 的范围和实现“类”的不同方法的内容,但显然我还不太了解它。我有这个soundClass
对象,我希望它包含一个track
对象数组,并且我想在它解码后立即添加push
一个新对象。但是,每当我如下所示时,第一个日志(track
tracklist
console.log
tracklist
track
console.log('track name '+ that.track.name);
that.track
soundClass.newTrack('track1.mp3')
soundClass.newTrack('track2.mp3')
console.log(soundClass.tracklist)
我得到一个包含两个 track2.mp3 对象的数组。我想这是一个范围问题或异步解码的问题,但我实际上不知道,所以这可能只是一些愚蠢的错误。
如果这是一个非常基本的问题,我很抱歉,但我会很感激任何帮助。
var soundClass = {
audioContext: new webkitAudioContext,
currentTime: 0,
track: {
name: 0,
trackSource: null,
trackBuffer:null,
isLoaded: false,
},
tracklist: [],
newTrack: function(filename){
var that=this;
var request =new XMLHttpRequest();
request.open("GET",filename,true);
request.responseType="arraybuffer";
request.onload=function(){
that.audioContext.decodeAudioData(request.response,function(buffer){
that.track.trackBuffer=buffer;
that.track.name=filename;
that.track.isLoaded=true;
that.track.trackSource=that.audioContext.createBufferSource();
console.log('track name '+ that.track.name);
console.log(that.track);
that.tracklist.push(that.track);
});
}
request.send();
},