Uncaught TypeError: значение не относится к типу AudioBuffer
Я получаю эту ошибку при попытке запустить XHR для загрузки образца. Uncaught TypeError: значение не относится к типу AudioBuffer. Кажется, все правильно, но я не уверен, в чем проблема.
Kit.prototype.load = function(){
if(this.startedLoading)
return;
this.startedLoading = true;
// var kick = "samples/M-808Sn2.wav";
var snare = "samples/M-808Sn2.wav";
// var hihat = "samples/M-808Sn2.wav";
// this.loadSample(0, kick, false);
this.loadSample(1, snare, false);
// this.loadSample(2, hihat, false);
}
Я начинаю это с запроса:
Kit.prototype.loadSample = function(sampleID, url, mixToMono){
// Load Asynchronously
var request = new XMLHttpRequest();
request.open("GET", url, true);
request.responseType = "arraybuffer";
var kit = this;
request.onload = function(){
var buffer;
context.decodeAudioData(request.response, function(decodedBuffer){
buffer = decodedBuffer;
});
switch(sampleID){
// case 0: kit.kickBuffer = buffer; break;
case 1: kit.snareBuffer = buffer; break;
// case 2: kit.hihatBuffer = buffer; break;
}
}
request.send();
}
Тогда я пытаюсь запустить его.
context = new webkitAudioContext();
var kit = new Kit();
kit.load();
var voice = context.createBufferSource();
voice.buffer = kit.snareBuffer;
voice.loop = true;
voice.playbackRate.value = 1;
voice.connect(gain);
voice.start(0);
voice.stop(2);
2 ответа
Проблема в том, что kit.load()
запускает асинхронный запрос на загрузку и декодирование аудио буферов. Две строки, которые следуют (createBufferSource
(назначить буфер) немедленно выполните асинхронный запрос, независимо от того, были ли загружены файлы. Таким образом, причина, по которой вы получаете это значение не имеет типа AudioBuffer
"потому что в то время вы назначаете voice.buffer = kit.snareBuffer
, kit.snareBuffer
все еще не определено, потому что обратный вызов загрузки не сработал.
Причина, по которой это, вероятно, работает window.onload
потому что запрос XHR может быть запущен до загрузки окна, что означает, что к window.onload
обработчик событий сработал, запрос XHR уже вернулся и kit.snareBuffer
это определенный audioBuffer
,
Этот ответ приходит немного поздно, но надеюсь, что это поможет!
Похоже на регресс в хроме. Даже я получаю ту же ошибку. Смотрите ниже Chrome Bug