网络音频 API 振荡器启动事件

Web audio API oscillator onstarted event

网络音频 API 振荡器允许脚本在振荡器因 onended 而停止时发出警报。

脚本启动时如何提醒?

const ac = new AudioContext()

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

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

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

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 事件不是很准确。它们在音频线程上被触发,需要回到主线程,在有时间的时候它们最终被触发。