【发布时间】:2015-09-29 14:16:35
【问题描述】:
在网络音频振荡器上调用 stop() 时,振荡器节点只是挂起、断开连接和未使用。
如果我告诉振荡器在 2 秒内停止:
oscillator.stop( audioCtx.currentTime + 2 );
有没有办法设置回调,以便我可以在 stop() 运行后立即删除振荡器?
我曾考虑使用 setTimeout 加上停止时间加上半秒左右,但最终可能会删除错误的振荡器。
【问题讨论】:
在网络音频振荡器上调用 stop() 时,振荡器节点只是挂起、断开连接和未使用。
如果我告诉振荡器在 2 秒内停止:
oscillator.stop( audioCtx.currentTime + 2 );
有没有办法设置回调,以便我可以在 stop() 运行后立即删除振荡器?
我曾考虑使用 setTimeout 加上停止时间加上半秒左右,但最终可能会删除错误的振荡器。
【问题讨论】:
振荡器节点支持在振荡器结束(停止)时调用的onended 事件。
【讨论】:
var self = this; var noteEndCallback = function(){delete self.notes[note];} this.notes[note].onended = noteEndCallback;
您为什么还要保留对振荡器的引用?如果在调用 stop() 后立即释放对振荡器的引用,WA 系统将保留它直到它完成,然后它会自动收集垃圾。你不需要自己坚持。
【讨论】: