2016-03-28 23 views
0

在web音頻中,有沒有一種方法可以讓MediaElementSource節點被垃圾收集?網絡音頻MediaElementSource節點未被垃圾收集

我已經設置了一個頁面,添加了兩個節點:一個MediaElementSource和一個振盪器。當我斷開它們兩個時,振盪器在垃圾收集後很快被收集,但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

嘗試清空你的var's,以便GC知道他們有資格進行垃圾回收。

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

我試過這個,它不能解決問題。奇怪,呃? – suncannon