gpt4 book ai didi

javascript - AudioContext 振荡器不会播放多次

转载 作者:行者123 更新时间:2023-11-28 00:09:28 26 4
gpt4 key购买 nike

我知道你不能多次演奏振荡器,所以我编写了一个函数,每次都会创建一个新的振荡器:

function playFrequency(f, t0, t1){
console.log(f, t0, t1);
var oscillator = self.audioContext.createOscillator();
oscillator.type = "square";
oscillator.frequency.value = f;
oscillator.connect(self.audioContext.destination);
oscillator.start(t0);
oscillator.stop(t1);
}

但奇怪的是,该函数实际上只会播放声音一次。我不明白为什么会发生这种情况。我不是每次调用该函数时都会创建一个新的振荡器吗?

当我创建一个具有完全相同代码的函数“playFrequency2(f, t0, t1)”时,即使第一个函数播放了声音,它也会播放声音。但我第二次调用的时候也不会播放声音。

最佳答案

您的问题在于传递给函数的开始时间。开始时间是根据 audioContext currentTime 计算的,该时间从创建 audioContext 时开始,并从那时起一直向前推进。因此,例如,当您从 0 开始第一个声音然后在 3 结束时,您的 audioContext 将在此之后继续运行。因此,如果您使用相同的时间参数调用新声音,它将不会播放,因为您的开始时间早于currentTime。您可以这样修改:

function playFrequency(f, t1){
console.log(f, t0, t1);
var oscillator = self.audioContext.createOscillator();
oscillator.type = "square";
oscillator.frequency.value = f;
oscillator.connect(self.audioContext.destination);
oscillator.start();
oscillator.stop(self.audioContext.currentTime+t1);
}

关于javascript - AudioContext 振荡器不会播放多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31033311/

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