在ALSA中每20毫秒获取一次音频数据?
我想调用snd_pcm_readi()并每20毫秒或每40毫秒获取一次音频数据。我想知道如何同步获取我的数据...即每X毫秒...在ALSA中每20毫秒获取一次音频数据?
感谢您的任何回应。
对于实时音频读取或播放,您通常会创建一个专用的高优先级工作线程来调用,然后使用一些环形缓冲区。你的线程应该避免锁定。
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
如果你只是从磁盘读取,你要足够的缓冲,然后就醒了,看看你是否需要之前阅读更多下一次你醒来(考虑总延迟)。
是snd_pcm_wait()我需要调用的函数?我还不是很清楚? – Xofo 2010-10-09 01:13:00
@Xofo对不起,问题是waaay广泛的回答我在合理的时间内(或简洁地) - 我甚至不知道你在做什么音频(填充/复制,生成,处理,从磁盘读取,从其他数据源读取)。这将有助于为您的帖子添加大量细节。这些文档可能会回答您的一些高级问题(有关通知的注释以及alsa如何处理数据交换 - 如果您只需在简单程序中使用轮询例程,snd_pcm_wait可能就是您想要的):http://www.alsa -project.org/alsa-doc/alsa-lib/pcm.html – justin 2010-10-10 04:48:52
我应该添加...什么是正确的方式来做到这一点在ALSA ...或者我需要使用睡眠或一些pthread_cond_timed_wait或类似的东西... – Xofo 2010-10-09 00:18:11