2016-12-07 81 views
2

我想通過使用c/C++腳本從共同的觸發信號同步兩臺不同計算機上的音頻回放和錄製。預計的延遲不應超過1毫秒。在不同的計算機上同步回放和錄製

檢索信號然後啓動腳本並不是真正的問題,延遲非常微不足道(幾微秒)。目前,我被困在平均延遲(播放開始和記錄開始之間)約20ms,偏差非常重要(5到10ms)。 計算機正在Linux上運行,我正在使用aplayarecord from alsa-utils(直接從使用system()命令的代碼開始)。

有人有一個好主意或經驗來減少或控制兩個音頻接口之間的延遲嗎?

在我看來,應該有一種方法來初始化接口(速率,輸出格式等),並且對於回放設備,將數據預加載到音頻緩衝器中,然後在接收到信號時開始播放。

謝謝

+0

音頻同步是一件棘手的事情。可能你應該看看JACK,而不是直接搞亂alsa API。您絕對可以製作單個JACK輸出,這將在多臺電腦上同步輸出音頻。 –

回答

0

這是一個艱難的,但技術上非常有趣。目前我能想到的最佳方法是使用RTT(往返時間)方法(假設您可以控制音頻設備的延遲達到所需的程度)。您可以將第一個系統上的信號發送到第二個系統,第二個系統會回覆該信號。第二個系統在預定義的時間量後開始記錄(可能爲100 ms,但取決於預期的延遲時間)。當拳頭系統收到響應時,它可能會確定往返時間。然後,我們可以在預定義的延遲之後開始播放,減去半程往返時間 - 假設前進路線的時間與返回時間相同。可以實現的準確度取決於您用於信號傳輸的系統。

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 
相關問題