2013-07-15 96 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可能會有所幫助。