我的應用程序(僅適用於macOS)使用低級CoreAudio功能(AudioDevice-low,而不是AudioUnit)。Mac Core AudioDeviceIOProc返回後播放的音頻輸出緩衝區?
我的問題是:在我的AudioDeviceIOProc
返回或需要一個額外的週期後,輸出緩衝器是否立即播放?
讓我通過一個例子來解釋問題的來源。考慮一個輸入監控應用程序,它會對輸入做一些處理並立即回放,爲簡單起見,考慮同一設備的輸入和輸出。
我通過AudioObjectSetPropertyData
設置緩衝區的大小,以480幀(10毫秒@ 48kHz的)尋址的屬性kAudioDevicePropertyBufferFrameSize
。當我調用AudioDeviceIOProc
時,我有10ms的輸入數據,然後在我的AudioDeviceIOProc
返回之前處理並寫入輸出緩衝區。
在這一點上我需要了解(一勞永逸),其中以下兩種情況下是正確的:
- A)10毫秒的時間需要,我只是設置輸出緩衝器之前通過可以播放
- B)在回調返回後立即播放緩衝區。這似乎是不可能的,因爲它要求在每個週期同一時間回撥需要正好。實際上,如果我們考慮第二次調用ioproc時的處理,則處理比前一個處理花費的時間多20微秒,這會導致差不多一個樣本(
0.02 * 48000/1000 samples = 0.96 samples
)。
我一直認爲A)是正確答案,這將適合與經驗法則來計算監控往返延遲爲2*I/O buffersize
(如這裏https://support.apple.com/en-om/HT201530解釋),但最近我一直在閱讀有關discording信息它。任何人都可以爲我解決這個問題嗎?謝謝