1

如果在 AudioContext 的 createMediaElementSource 中使用了该元素,则当我动态更改其源时,音频声音会失真(例如同时播放两次或类似的东西)。

这是错误的极简示例: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');
});

如果我把它放在它工作node.disconnect(0);之前audio.src = ...,但数据不再被处理。我尝试了很多东西,比如创建一个新的上下文,但它似乎没有删除以前设置的 javascript 节点。

你知道我该如何解决吗?

提前致谢。

4

1 回答 1

1

我建议看看这个:jsbin.com/acolet/1

它似乎在做你正在寻找的同样的事情。

我从这篇文章中找到了这个。

于 2013-03-01T18:58:14.957 回答