2013-07-15 55 views
0

我有一个用C++编写的程序,它使用RtAudio(Directsound)以48kHz采样率采集和回放音频。同步两个声卡

输入捕捉使用回调选项。该回调将数据写入环形缓冲区。 输出是一个阻塞写功能在一个单独的线程从环缓冲区读取。

如果输入和输出设备是相同的音频循环完美。 现在我想从设备1获取音频并在设备2上播放。每个设备都有自己的采样时钟,设置为48kHz,但不同步。几秒钟后,输入和输出不同步。

是否可以同步两个独立的无线设备?

回答

0

有你面临两个挑战:

  1. 让两个设备在同一时间开始。
  2. 让两个设备保持同步。

这两项任务都很困难。在专业音频世界中,#2通过特殊硬件完成,可以同步多个设备的字时钟。它也可以通过high quality video signal完成。我相信它也可以用火线设备来完成,但我不确定这是如何工作的。在实践中,我使用的设备没有同步(“狂放”),并获得了非常合理的同步长达一两个小时。取决于你想要做什么,在几分钟内同步不应该漂移超过几毫秒。如果是这样,你可以考虑你的硬件坏了(当然,廉价的硬件通常是坏的)。

至于#1,我不确定这是可能的directsound在任何可能的意义上。在任何音频API都可能的情况下,最好的情况是很困难的:两张卡都需要一些时间来设置,打开和开始播放。一般来说,解决方案是使用一个API,其中这个时间非常低(例如ASIO)。这适用于视频等应用程序,但我不知道它是否真正解决了一般问题。

如果你确实需要解决这个问题,你可以打开这两个卡片,开始播放静音,并使用卡片生成的时间信息来建立将数据放入卡片和最终播放之间的延迟(这将会对于每张卡片可能不同,并且可能每次运行时都会有所不同),并使用该数据计算何时开始实际播放。我不知道RTAudio是否提供了必要的时间信息,但是PortAudio可以。 This document可能会有所帮助。