为了创建触发器并让它们播放,我需要复制它们并点击我创建的按钮。副本很好。但是当我切换按钮时,它说我在非法调用AudioContext对象的函数。
我尝试使用单个AudioContexts,我尝试过forEach、for...of和for循环以及while循环。我想不出还有什么是我没有尝试过的,谷歌也没有给出多少回应,足够让人吃惊的是。我原以为其中一个循环会是完成任务的一个很好的入口,但没有一个是灵丹妙药。
有人能看到我代码中的错误吗?
`
function playPauseSample(osc)
{
console.log(audioCtxPads.get(osc.id));
if (osc.getAttribute("active") == "true")
{
osc.setAttribute("active","false");
var z = audioCtxPads.get(osc.id);
var i = 1;
while (audioCtxPads.has(osc.id) && i < 8)
{
var p = "0" + i.toString();
console.log(z);
if (z[p] != null)
z[p].suspend();
i++;
}
audioCtxPads.set(osc.id, z);
console.log(z);
osc.classList.toggle("on");
osc.classList.toggle("off");
return;
}
else if (osc.getAttribute("active") == "false") {
osc.setAttribute("active","true");
var z = audioCtxPads.get(osc.id);
var i = 1;
while (audioCtxPads.has(osc.id) && i < 8)
{
var p = "0" + i.toString();
console.log(z);
if (z[p] != null)
z[p].resume();
i++;
}
audioCtxPads.set(osc.id, z);
console.log(z);
osc.classList.toggle("off");
osc.classList.toggle("on");
return;
}
console.log(osc.getAttribute("active"));
}`
发布于 2022-10-28 23:11:17
if (audioCtxPads.has(osc.id) && osc.getAttribute("active") == "true")
{
osc.setAttribute("active","false");
for (let i of audioCtxPads.get(osc.id).values())
for (let j of i.values())
j.suspend();
if (osc.nextSibling.nextSibling.classList == "play on")
osc.nextSibling.nextSibling.classList.toggle("on");
osc.classList.toggle("on");
osc.classList.toggle("off");
return;
}
else if (audioCtxPads.has(osc.id) && osc.getAttribute("active") == "false") {
osc.setAttribute("active","true");
console.log(audioCtxPads.get(osc.id).values());
for (let i of audioCtxPads.get(osc.id).values())
for (let j of i.values())
j.resume();
if (osc.nextSibling.nextSibling.classList == "play on")
osc.nextSibling.nextSibling.classList.toggle("on");
osc.classList.toggle("off");
osc.classList.toggle("on");
return;
}好吧,答案就埋在筑巢结构下。你必须得到这些值,然后得到这组值的值。还有一些类似的,对于那些在未来,请仔细阅读这一点。谢谢大家!(顺便说一句,这个示例使用的是带有文本键的Map和值的Array。就这样吧!)
https://stackoverflow.com/questions/74237560
复制相似问题