在ALSA中每20毫秒获取一次音频数据?

问题描述:

我想调用snd_pcm_readi()并每20毫秒或每40毫秒获取一次音频数据。我想知道如何同步获取我的数据...即每X毫秒...在ALSA中每20毫秒获取一次音频数据?

感谢您的任何回应。

+0

我应该添加...什么是正确的方式来做到这一点在ALSA ...或者我需要使用睡眠或一些pthread_cond_timed_wait或类似的东西... – Xofo 2010-10-09 00:18:11

对于实时音频读取或播放,您通常会创建一个专用的高优先级工作线程来调用,然后使用一些环形缓冲区。你的线程应该避免锁定。

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