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節點。
你知道我該如何修復它嗎?
在此先感謝。
感謝您鏈接到我以前的答案!我相信他所缺少的是斷開舊節點後重新連接新的MediaElementSource節點。 – idbehold
謝謝,下面你的例子我現在重新創建整個音頻元素,它的工作正常。我只是將它附加到頁面上的一個元素,以允許用戶使用它。對於那些想要這樣做的人,不要忘記把'audio.controls ='true';'以便使元素可見 –