使用AudioContext时,Chrome会更改音频元素的来源

时间:2013-01-20 07:58:34

标签: javascript html5-audio

如果在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节点。

你知道我怎么解决它吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

我建议你看一下:jsbin.com/acolet/1

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

我是从this post找到的。