gpt4 book ai didi

c - ALSA PCM 回调有什么限制?

转载 作者:太空狗 更新时间:2023-10-29 15:36:36 25 4
gpt4 key购买 nike

我正在 Linux 下编写一个程序,它使用 ALSA(连接到自定义设备)同时使用回放和记录。我想使用异步回调架构来读取和写入数据。

但是,我一直无法获得有关允许我在回调中执行的操作的限制的任何信息。具体来说,我必须是异步安全的吗?如果是这样,这似乎严重限制了可以做的事情,因为除其他外,我不应该引用任何全局变量,这使得它很难,例如,从由执行的主线程填充的缓冲区中读取或写入到一个缓冲区,该缓冲区随后保存到回调之外的文件中。

有没有我可以在 ALSA 回调中使用的任何 C 并发结构来协调全局变量与主线程的使用?例如,我可以使用 POSIX 信号量吗?我是否可以保证 ALSA 回调相对于主线程是原子的(我知道它对其他 ALSA 回调不是原子的)?

非常感谢人们对此提出的任何见解。

最佳答案

我不知道这个答案是否会被人们认为对 ALSA 过于负面,但无论如何我都会给出。

我拼命尝试在几个异步应用程序中使用 ALSA。它漏洞百出,文档匮乏且难以使用,以至于经过几天的努力使它正常工作后,我最终放弃了。

我最终使用了 ALSA OSS 仿真层,并简单地为声音设备打开一个 fd,并使用 libevent 作为执行异步回调的一种方式。这个解决方案非常适合我,我对结果非常满意 -- 我已经使用它一段时间了。

回想起来,ALSA 惊人地过于复杂、过度设计、漏洞百出、记录不当、与设计人员事先没有想到的 I/O 多路复用技术不兼容等等——我很难理解为什么它最终成为Linux 系统中的标准,而在其他 Unix 操作系统上可以使用更简单和更好的设计。

关于c - ALSA PCM 回调有什么限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9490944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com