JavaScript:BufferLoader。。。loader.onload不是一个函数
因此,我正在使用这个类BufferLoader,我得到一个错误,它说: 未捕获类型错误:loader.onload不是函数: 有没有办法解决这个问题,但保持代码运行不变JavaScript:BufferLoader。。。loader.onload不是一个函数,javascript,Javascript,因此,我正在使用这个类BufferLoader,我得到一个错误,它说: 未捕获类型错误:loader.onload不是函数: 有没有办法解决这个问题,但保持代码运行不变 function BufferLoader(context, urlList, callback) { this.context = context; this.urlList = urlList; this.onload = callback; this.bufferList = new Array();
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
var request = new XMLHttpRequest();
request.open("GET", url, true);
request.responseType = "arraybuffer";
var loader = this;
request.onload = function() {
// Asynchronously decode the audio file data in request.response
loader.context.decodeAudioData(
request.response,
function(buffer) {
if (!buffer) {
alert('error decoding file data: ' + url);
return;
}
loader.bufferList[index] = buffer;
if (++loader.loadCount == loader.urlList.length)
loader.onload(loader.bufferList); // <<<****************************** here
},
function(error) {
console.error('decodeAudioData error', error);
}
);
}
request.onerror = function() {
alert('BufferLoader: XHR error');
}
request.send();
}
BufferLoader.prototype.load = function() {
for (var i = 0; i < this.urlList.length; ++i)
this.loadBuffer(this.urlList[i], i);
}
创建新的缓冲加载程序时没有分配回调函数,因此onload将是未定义的 要修复此问题,您必须执行以下操作:
try { context = new AudioContext(); }
catch(e) { alert("Web Audio API is not supported.") }
beatsPerMinute = 120;
bufferLoader = new BufferLoader(
context,
[
"bass/dual_bass_1.wav",
"bass/fusion_bass_c3.wav",
"bass/fusion_accoustic_bass_c2.wav",
"bass/casio_mt_45_bass_c2.wav",
"bass/casio_cz_5000_synth_bass_c1.wav",
"bass/bowed_bass_c2.wav",
"bass/sanctuary_qcard_accoustic_bass_c2.wav"
],
function(bufferList) {
// Do stuff...
}
);
bufferLoader.load();
});
您如何使用
BufferLoader
?您正在创建它的新实例吗?i、 e.new BufferLoader(context,urlist,callback)
如果有人向您的构造函数传递了nocallback
,那么。onload
将不是一个函数。更新以显示类是如何被调用的……好的,我将测试它!
try { context = new AudioContext(); }
catch(e) { alert("Web Audio API is not supported.") }
beatsPerMinute = 120;
bufferLoader = new BufferLoader(
context,
[
"bass/dual_bass_1.wav",
"bass/fusion_bass_c3.wav",
"bass/fusion_accoustic_bass_c2.wav",
"bass/casio_mt_45_bass_c2.wav",
"bass/casio_cz_5000_synth_bass_c1.wav",
"bass/bowed_bass_c2.wav",
"bass/sanctuary_qcard_accoustic_bass_c2.wav"
],
function(bufferList) {
// Do stuff...
}
);
bufferLoader.load();
});