2013-01-20 48 views
1

如果在AudioContext的createMediaElementSource中使用該元素,則會動態更改其音源,導致音頻聲音變形(如同時播放兩次或類似情況)。使用AudioContext時,Chrome問題會改變音頻元素的來源

這是一個極簡主義的錯誤示例:http://jsfiddle.net/BaliBalo/wkFpv/(它首先運行良好,但當您單擊鏈接更改源代碼時,它會變得很瘋狂)。

var audio = document.getElementById('music'); 
var actx = new webkitAudioContext(); 
var node, processor = actx.createScriptProcessor(1024, 1, 1); 
processor.onaudioprocess = function(e) { /* STUFF */ }; 
processor.connect(actx.destination); 
audio.addEventListener('canplay', canPlayFired); 
function canPlayFired(event) 
{ 
    node = actx.createMediaElementSource(audio); 
    node.connect(processor); 
    audio.removeEventListener('canplay', canPlayFired); 
} 
$('a.changeMusic').click(function(e){ 
    e.preventDefault(); 
    audio.src = $(this).attr('href'); 
}); 

如果我audio.src = ...之前把node.disconnect(0);它的工作原理,但數據是沒有更多的處理。我嘗試了很多東西,比如創建一個新的上下文,但似乎並沒有抹去以前設置的javascript節點。

你知道我該如何修復它嗎?

在此先感謝。

回答

1

我建議採取看看這個:jsbin.com/acolet/1

它似乎是在做你正在尋找同樣的事情。

我是從this post找到這個的。

+2

感謝您鏈接到我以前的答案!我相信他所缺少的是斷開舊節點後重新連接新的MediaElementSource節點。 – idbehold

+0

謝謝,下面你的例子我現在重新創建整個音頻元素,它的工作正常。我只是將它附加到頁面上的一個元素,以允許用戶使用它。對於那些想要這樣做的人,不要忘記把'audio.controls ='true';'以便使元素可見 –