javascript - Web 音频 MediaElementSource 节点未进行垃圾回收

标签 javascript html audio html5-audio web-audio-api

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

相关文章:

javascript - editly - 创建视频后在哪里可以获得返回值?

javascript - 扩展 super 测试

audio - 在twilio session 中播放音频文件

python - Pyglet无法加载.wav文件

javascript - 谷歌地图隐藏手形图标

javascript - 前端 JS 和后端 JS 之间更好的性能

javascript - 使 Jquery 代码仅在元素在屏幕上时运行

javascript - html javascript 类 ="highslide"在 android 浏览器上不起作用

javascript - 根据显示/隐藏 CSS 调整列宽

c# - 必应语音识别服务 - SpeechClient 问题 "Audio format could not be parsed."