2011-07-13 50 views
3

最近,我一直在爲iOS設計一個非常具體的項目,並且我的研究將我引向幾乎最終的代碼。我已經解決了迄今爲止我發現的所有極端困難,但是在這個問題上我似乎沒有任何線索(關於原因或解決問題的可能性)。AudioToolbox - 記錄時的回撥延遲

我建立了我的音頻序列(採樣率44100,格式LinearPCM,每個通道16位,每幀2個字節,每個通道1個通道...),並開始用12個音頻緩衝區錄製聲音。但是,每回調4次後似乎都會有延遲。

情況如下:前4個回調被調用,每個間隔約爲2 ms。但是,在4日和5日之間,有60毫秒的延遲。同樣的事情發生在8日和9日,12日和13日之間...

似乎有每幀字節和延遲時刻之間的關係。我知道這一點,因爲如果我改變到每幀4字節,我開始在8日和9日之間,然後在16日和17日,24日和25日之間......但似乎並沒有延遲時間與緩衝區數量之間的任何關係。

回調函數只做兩件事:將音頻數據(inBuffer-> mAudioData)存儲在我的類可以使用的數組上;並調用另一個AudioQueueEnqueueBuffer,將當前緩衝區放回隊列中。

有沒有人已經經歷過這個問題?至少有誰知道可能是什麼原因呢?

預先感謝您。

回答

2

音頻隊列API似乎運行在RemoteIO音頻單元API之上,與音頻隊列緩衝區大小無關,實際的音頻緩衝區大小可能與您的示例無關,並且在您的示例中大於此大小。所以,無論何時RemoteIO緩衝區準備就緒,一大堆小型AQ緩衝區都會很快被填滿。然後你得到更長的延遲,等待一些更大的緩衝區充滿樣本。

如果你想要更好的控制(更均勻間隔)緩衝等待時間,請嘗試直接使用RemoteIo音頻單元。

+1

非常感謝您,這正是我一直在尋找的途徑。我花了幾個小時用RemoteIO API重寫我的代碼,因爲文檔和示例代碼並不簡單,並且有很多「陷阱」可以理解。但現在它終於有效了,我可以說你的答案是完美的。沒有任何延遲,但是可以以最快的配置實現約2.94ms(在iPhone 4上)的非常穩定的序列。 –