Web音频MediaElementSource节点未被垃圾回收

时间:2016-03-28 03:47:52

标签: javascript html5 audio html5-audio web-audio

在网络音频中,有一个技巧可以让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>

1 个答案:

答案 0 :(得分:0)

尝试清空var,以便GC知道它们有资格进行垃圾回收。

function disc() {
    audio.remove()
    stream.disconnect()
    stream = null
    sine.disconnect()
    sine = null //doing this here for consistency
}