2010-10-09 102 views
5

我想調用snd_pcm_readi()並每20毫秒或每40毫秒獲取一次音頻數據。我想知道如何同步獲取我的數據...即每X毫秒...在ALSA中每20毫秒獲取一次音頻數據?

感謝您的任何迴應。

+0

我應該添加...什麼是正確的方式來做到這一點在ALSA ...或者我需要使用睡眠或一些pthread_cond_timed_wait或類似的東西... – Xofo 2010-10-09 00:18:11

回答

2

對於實時音頻讀取或播放,您通常會創建一個專用的高優先級工作線程來調用,然後使用一些環形緩衝區。你的線程應該避免鎖定。

ALSA例子:

http://www.alsa-project.org/alsa-doc/alsa-lib/_2test_2latency_8c-example.html#a36

http://www.alsa-project.org/alsa-doc/alsa-lib/_2test_2pcm_8c-example.html

如果你只是從磁盤讀取,你要足夠的緩衝,然後就醒了,看看你是否需要之前閱讀更多下一次你醒來(考慮總延遲)。

+0

是snd_pcm_wait()我需要調用的函數?我還不是很清楚? – Xofo 2010-10-09 01:13:00

+0

@Xofo對不起,問題是waaay廣泛的回答我在合理的時間內(或簡潔地) - 我甚至不知道你在做什麼音頻(填充/複製,生成,處理,從磁盤讀取,從其他數據源讀取)。這將有助於爲您的帖子添加大量細節。這些文檔可能會回答您的一些高級問題(有關通知的註釋以及alsa如何處理數據交換 - 如果您只需在簡單程序中使用輪詢例程,snd_pcm_wait可能就是您想要的):http://www.alsa -project.org/alsa-doc/alsa-lib/pcm.html – justin 2010-10-10 04:48:52

相關問題