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