gpt4 book ai didi

audio - 未捕获的TypeError:值不是AudioBuffer类型的

转载 作者:行者123 更新时间:2023-12-02 22:28:17 28 4
gpt4 key购买 nike

当我尝试运行XHR加载样本时出现此错误。未捕获到的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);

最佳答案

问题在于kit.load()会触发异步请求以加载和解码音频缓冲区。无论是否已加载文件,后面的两行(createBufferSource,分配缓冲区)都会立即跟随异步请求。因此,得到此“值不是AudioBuffer类型”的原因是,在分配voice.buffer = kit.snareBuffer时,由于未触发加载回调,因此kit.snareBuffer仍未定义。

之所以可能与window.onload一起使用,是因为XHR请求可以在加载窗口之前运行,这意味着在window.onload事件处理程序被触发时,XHR请求已经返回,并且kit.snareBuffer是已定义的audioBuffer

这个答案来得有点晚,但希望对您有所帮助!

关于audio - 未捕获的TypeError:值不是AudioBuffer类型的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14825030/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com