【问题标题】: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 事件不是很准确。它们在音频线程上被触发,需要返回主线程,当有时间时它们最终会被触发。