在网络音频中,是否有技巧可以让 MediaElementSource 节点被垃圾收集?
我设置了一个添加两个节点的页面:MediaElementSource 和 Oscillator。当我断开它们两个连接时,振荡器很快就会被垃圾收集,但 MediaElementSource 会永久保留。 (这是根据可视化音频图的 Firefox 网络音频开发工具得出的。)
我在 Mac (Yosemite) 上的 Chrome 和 Firefox 中都遇到了这种情况。
为什么 MediaElementSource 节点永久徘徊?有什么方法可以在不重新加载页面或终止音频上下文的情况下摆脱它?
<audio src="gam2.mp3" id="audio" controls></audio>
<button onclick="disc()">disconnect</button>
<script>
var actx = new AudioContext()
var audio = document.getElementById("audio")
var stream = actx.createMediaElementSource(audio)
stream.connect(actx.destination)
var sine = actx.createOscillator()
sine.connect(actx.destination)
function disc() {
audio.remove()
stream.disconnect()
sine.disconnect()
}
</script>
最佳答案
尝试将您的 var 清空,以便 GC 知道它们有资格进行垃圾回收。
function disc() {
audio.remove()
stream.disconnect()
stream = null
sine.disconnect()
sine = null //doing this here for consistency
}
关于javascript - Web 音频 MediaElementSource 节点未进行垃圾回收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36255666/