javascript - Chrome 使用 AudioContext 时更改音频元素源的问题

标签 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 节点。

你知道我该如何解决这个问题吗?

提前致谢。

最佳答案

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

它似乎正在做与您正在寻找的相同的事情。

我从 this post 找到了这个.

关于javascript - Chrome 使用 AudioContext 时更改音频元素源的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14422691/

相关文章:

c# - nhtmlunit javascript 不工作

python - Google App Engine 为音频元素提供 MP3 服务需要内容范围 header

javascript - 如何使用各种 rampToValueAtTime 方法

javascript - 仅在 SImpleWebRTC 中启动音频通话

javascript - HTML5 音频。替换元素仍然是相同的音频文件(缓存)如何解决?

javascript - 无法使用 $.post() 发布 javascript 对象

javascript - 我们可以用字符串变量检查 match() 函数吗

javascript - redux thunk - 如何在 Promise 完成后分派(dispatch)嵌套数组中的数据

javascript - iOS 的视频自动播放无法在应用程序中运行

android - AudioContext() 在某些手机上不存在?