如何播放多个AudioBufferSourceNode同步?

时间:2013-11-07 20:32:55

标签: html5 web-audio

我有多个必须同步播放的音频文件。我已经读过Web Audio API是最好的解决方案。但是,我找不到任何显示如何实现这一目标的文件。

我读过的几乎所有文章都是为了开始播放。

//Let's say I have AudioBufferSourceNode connected to two buffers
var source1, source2;

source1.start(0);
source2.start(0);

这不应该导致source2比source1稍晚开始播放吗?

此外,是什么让这些来源保持同步?我在任何文档中都找不到提及确保源同步播放的内容。

感谢。

2 个答案:

答案 0 :(得分:1)

音频上下文有一个时钟,缓冲区播放在那个时钟上 - 所以是的,它们将保持同步。

甚至调用start(0); (0)开始;如上所述将完美同步,因为start()正在音频线程上设置调度请求,并且这两者的实际调度将一起发生。 “now”实际上是未来(音频系统延迟)。

答案 1 :(得分:0)

您可以在将来稍微安排它们。

var source1, source2;
var when = context.currentTime + 0.01;

source1.start(when);
source2.start(when);

从你定义when的那一刻开始,这两个声音都会安排好10毫秒。它足够快,它会被视为立即,但为第一个源节点上实际调用start的开销提供了一些喘息空间。

如果您有大量节点,有更好的方法可以做到这一点,但对于简单的情况,这应该没问题。