【问题标题】:Chrome issue changing source of audio element when using AudioContext使用 AudioContext 时 Chrome 会更改音频元素的来源
【发布时间】:2013-03-02 04:51:59
【问题描述】:

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

你知道我该如何解决吗?

提前致谢。

【问题讨论】:

    标签: javascript html5-audio


    【解决方案1】:

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

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

    我是从this post 找到的。

    【讨论】:

    • 感谢您链接到我之前的答案!我相信他缺少的是在断开旧节点后重新连接新的MediaElementSource 节点。
    • 谢谢,按照你的例子,我现在重新创建了整个音频元素,它可以正常工作。我只是将它附加到页面上的一个元素以允许用户使用它。对于那些也想这样做的人,不要忘记输入audio.controls = 'true'; 以使元素可见
    猜你喜欢
    • 2016-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多