类型错误: 无法在"音频缓冲区源节点"上设置'buffer'属性:提供的值不是"音频缓冲区"类型



我正在研究现有的codoCircle。放低音量。

它按预期工作。

现在我想在代码笔中使用相同的代码,但出现此错误

类型错误:无法在"音频缓冲区源节点"上设置"缓冲区"属性:提供的值不是"音频缓冲区"类型

我做了一些研究,我发现第一个答案很有用。

答案说

当我在playSoundplayer.buffer = buffer中分配时,缓冲区仍未定义,因为加载回调尚未触发。

这对我来说是有道理的,所以我试图做一个setTimeout喜欢:

setTimeout(playSound, 9000);

它没有成功。

您知道对此有什么解决方法吗?为什么在CodeCircle中工作而不是在Codepen中?

他对我来说很有意义,所以我尝试做一个像.

.

这更像是一个快速修复,但很棘手,因为您不确定是否加载了所有内容。

解决方案是等到每个样品都加载完毕。最好的方法是使用 Promises,但这需要(大型)重构,并且与当前所有浏览器都不兼容(因此您需要 Babel 或 Typescript 等)。

所以我做了一个更简单的方法:对于每个样本,我都创建了一个boolean变量,该变量将在加载完成后设置为true(在回调函数中)

var loadedHat = false;
var loadedSnare = false;
var loadedBd = false;
loadSample('cl_hat_3001.wav', function (buffer) {
hat = buffer;
loadedHat = true;
startWhenAllLoaded();
});
loadSample('brp_snrim1.wav', function (buffer) {
snare = buffer;
loadedSnare = true;
startWhenAllLoaded();
});
loadSample('bd08.wav', function (buffer) {
bd = buffer;
loadedBd = true;
startWhenAllLoaded();
});

然后我包装了你的代码以启动一个start函数并做了一个startWhenAllLoaded,当所有树布尔值都true时开始

function startWhenAllLoaded()
{
if(!started && loadedHat && loadedSnare && loadedBd){
started = true;
start();
}
}

编辑后的代码笔在这里

注意:不确定现在是否一切正常,错误消失了,但我认为代码需要一些调整

相关内容

最新更新