在不同的计算机上同步播放和录制

时间:2016-12-07 07:12:47

标签: c++ c linux audio synchronization

我想使用c / c ++脚本将公共触发信号在两台不同的计算机上同步音频和录音。预计延迟不应超过1毫秒。

检索信号然后启动脚本并不是真正的问题,延迟非常微不足道(几微秒)。

目前,我陷入平均延迟(在播放开始和记录开始之间)约20ms,偏差非常重要(5到10 ms)。 计算机在Linux上运行,我正在使用 aplay 和来自 alsa-utils arecord (使用system()命令直接从代码启动)。

有人有一个好主意或经验来减少或控制两个音频接口之间的延迟吗?

在我看来,应该有一种方法来初始化接口(速率,输出格式......),并且对于播放设备,将数据预加载到音频缓冲区中,然后在接收到信号时开始播放。 / p>

由于

1 个答案:

答案 0 :(得分:1)

这是一个艰难的,但在技术上也非常有趣。我现在能想到的最佳方法是使用RTT(往返时间)方法(假设您可以控制音频设备的延迟到所需的程度)。您可以在第一个系统上向第二个系统发出信号,第二个系统会回复该信号。第二个系统在预定义的时间(可能是100毫秒,但取决于预期的延迟)后开始记录。当第一个系统收到响应时,它可以确定往返时间。然后我们可以在预定义的延迟之后开始播放,减去半个往返时间 - 假设前进的时间与返回的时间相同。可以实现的准确性取决于您用于信令的系统。

EMIT SIGNAL ON SYSTEM 1

RECEIVE SIGNAL ON SYSTEM 2
EMIT SIGNAL ON SYSTEM 2

RECEIVE SIGNAL ON SYSTEM 1
DETERMINE ROUND-TRIP-TIME

START ON SYSTEM 2 AFTER X ms
START ON SYSTEM 1 ASTER (X-RTT/2) ms