Webaudio振荡器start()回调?

时间:2018-12-19 22:30:02

标签: javascript web-audio web-audio-api

我有一个合成器声音的振荡器,我在不同的时间在音序器中启动它。下面的代码在我的声音开始运行之前运行(在音频开始之前,如果时间是变量,此代码可以运行很多次。)

osc.start(time);
osc.stop(time + 0.51);

所以说这个振荡器在时间0.0、2.0、3.0等处开始。当它以振荡器节点的onended回调结束时,我有一个回调。

但是当启动时如何获得回调?

2 个答案:

答案 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);
  };