2

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

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

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

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

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

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

谢谢。

4

2 回答 2

1

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

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

于 2013-11-08T18:33:14.010 回答
0

您可以在以后稍微安排它们。

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

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

这将安排这两种声音从您定义的那一刻起精确播放 10 毫秒when。它足够快,可以被视为立即执行,但为实际调用start第一个源节点的开销提供了一点喘息的空间。

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

于 2013-11-07T20:42:09.100 回答