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

http://code.google.com/p/chromium/issues/detail?id=128826

Другие вопросы по тегам