gpt4 book ai didi

c++ - 在不同计算机上同步播放和录制

转载 作者:太空狗 更新时间:2023-10-29 12:25:47 25 4
gpt4 key购买 nike

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

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

目前,我陷入了大约 20 毫秒的平均延迟(播放开始和记录开始之间),偏差非常重要(5 到 10 毫秒)。计算机在 Linux 上运行,我正在使用 alsa-utils 中的 aplayarecord(使用 system() 命令直接从代码开始)。

有人有好的想法或经验来减少或控制两个音频接口(interface)之间的延迟吗?

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

谢谢

最佳答案

这是一项艰巨的任务,但在技术上也非常有趣。我目前能想到的最佳方法是使用 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

关于c++ - 在不同计算机上同步播放和录制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41011436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com