【问题标题】:Web audio API oscillator onstarted eventWeb 音频 API 振荡器 onstarted 事件
【发布时间】:2021-11-13 20:37:29
【问题描述】:

当振荡器以onended 停止时,允许向 Web 音频 API 振荡器发出警报。

启动时如何提示?

const ac = new AudioContext()

const osc = ac.createOscillator()
osc.type = 'sawtooth'
osc.connect(ac.destination)

osc.onstarted = () => console.log('ended!') // doesn't works :'(
osc.onended = () => console.log('ended!') // :)

osc.start(5)
osc.stop(7)

【问题讨论】:

    标签: javascript events web-audio-api


    【解决方案1】:

    ended 事件是OscillatorNode 发出的唯一事件。我猜这是因为这个事件是从AudioScheduledSourceNode接口继承而来的。

    继承该接口的另一个节点是AudioBufferSourceNode。对于AudioBufferSourceNode,通常很难判断它何时真正结束,这就是我认为该事件存在的原因。这也可能是没有started 事件的原因。

    无论如何,您都可以使用另一个AudioScheduledSourceNode 重新构建该功能。我建议使用ConstantSourceNode,因为它是最轻量级的。

    const constantSourceNode = new ConstantSourceNode(ac);
    
    constantSourceNode.onended = () => {
        console.log('osc started');
    };
    constantSourceNode.start();
    constantSourceNode.stop(5);
    

    请注意ended 事件不是很准确。它们在音频线程上被触发,需要返回主线程,当有时间时它们最终会被触发。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-02
      • 1970-01-01
      • 2013-09-11
      • 2021-03-29
      • 1970-01-01
      • 2020-07-12
      • 1970-01-01
      相关资源
      最近更新 更多