在网络音频中,有一个技巧可以让MediaElementSource节点被垃圾收集吗?
我已经设置了一个添加两个节点的页面:MediaElementSource和Oscillator。当我断开它们时,振荡器很快被垃圾收集,但MediaElementSource永久保留。 (这是根据Firefox网络音频开发工具,可视化音频图形。)
我在Mac(优胜美地)的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>
答案 0 :(得分:0)
尝试清空var,以便GC知道它们有资格进行垃圾回收。
function disc() {
audio.remove()
stream.disconnect()
stream = null
sine.disconnect()
sine = null //doing this here for consistency
}