我有一个合成器声音的振荡器,我在不同的时间在音序器中启动它。下面的代码在我的声音开始运行之前运行(在音频开始之前,如果时间是变量,此代码可以运行很多次。)
osc.start(time);
osc.stop(time + 0.51);
所以说这个振荡器在时间0.0、2.0、3.0等处开始。当它以振荡器节点的onended回调结束时,我有一个回调。
但是当启动时如何获得回调?
答案 0 :(得分:1)
在仔细阅读了文档之后,对于Vantage JS而言,您似乎想完成的任务并不容易。但是,我最近发现了一个名为Tone.js的JS库。使用它们的库,振荡器节点具有“状态”属性,该属性告诉您何时“启动”或“停止”振荡器。这可能对您有所帮助,因为它可能允许您编写一个在振荡器进入“启动”状态时触发的函数。以下是有关Tone.js的一些相关文档:https://tonejs.github.io/docs/r12/OscillatorNode#getstateattime
希望这会有所帮助。
答案 1 :(得分:1)
我最近遇到了这个问题,并通过创建一个在启动时同时停止的静音振荡器解决了这个问题。这使您可以控制onended
回调的时间。
这样做的缺点是,您必须将函数与要附加回调的振荡器分开来提示。但是,它可以让您使用香草JS实现所需的功能
cueFunction = (time, callbackFunction) => {
audioContext = new window.AudioContext()
const silentOscillator = audioContext.createOscillator();
silentOscillator.connect(audioContext.destination);
silentOscillator.onended = () => {
callbackFunction();
};
silentOscillator.start(time);
silentOscillator.stop(time);
};