我正在构建一个需要创建和销毁大量音频节点的东西。据我所知,为了销毁一个音频节点,必须执行以下步骤:
- 将该节点的所有引用设置为null或其他内容
- 如果适用,调用stop方法
- 断开所有内部和外部连接
只要有任何引用指向它,AudioNode 就会存在。有几种类型的引用:
- 遵循正常垃圾回收规则的普通 JavaScript 引用。
- 对于 AudioBufferSourceNodes 和 OscillatorNodes,同时维护播放引用。这些节点在播放时维护对自身的播放引用。
- 连接引用,如果另一个 AudioNode 连接到它,则发生连接引用。
- 尾时间引用,即 AudioNode 在其具有尚未被发出的任何内部处理状态时维护自身的引用。例如,ConvolverNode 具有尾声,即使接收到静音输入也会继续播放(想象在大型音乐厅鼓掌并继续听到声音在整个音乐厅回响)。一些 AudioNodes 具有此属性。请参阅特定节点的详细信息。
任何连接成循环并直接或间接连接到 AudioContext 的 AudioDestinationNode 的 AudioNodes 将与 AudioContext 一样长寿。
据我所知:
audioNode.disconnect()
而没有参数,它将断开节点的所有输入和输出。audioNode.disconnect()
只会断开与之前连接的任何输出的连接,不会断开节点的输入。请参考MDN上的disconnect。或者您可以自己编写一个演示。 - undefined