gpt4 book ai didi

c - 使用基于事件的接口(interface)播放 OS X/Linux 音频?

转载 作者:可可西里 更新时间:2023-11-01 11:47:23 27 4
gpt4 key购买 nike

我正在为 Linux/OS X 开发一个流媒体音频播放器,它有一个奇怪的用例,它让我相信任何已经存在的东西都不起作用。对于第一部分,我只想接收 MP3 数据并播放它。我目前正在使用 libmad 进行解码,使用 libao 进行播放。我的问题是 libao,我不认为这是我的最佳选择。

特别是 ao_play 函数是阻塞的。在播放完传递给它的整个缓冲区之前,它不会返回。这没有提供足够的时间来解码调用 ao_play 之间的 block ,因此解码必须完全提前或同时完成。因为这是流媒体,所以我拒绝提前解码。 (可以想象我可以发送一个多小时的音频数据——我不想使用那么多内存。)这就剩下并发性了。但是,虽然 pthreads 是 Linux 和 OS X 的标准,但许多周围的库却不是。我不太确定我想要并发 - 所以我正在重新考虑我对 libao 的选择。

对于我的应用程序,我能想到的用于音频播放的最佳模型是获取一个我可以选择的文件描述符,以便在它准备好写入时得到通知,然后向其发出非阻塞写入。 (这是由于用例的其余细节,这意味着无论如何我真的想要一个选择循环。)

是否有以这种方式在 Linux 和 OS X 上运行的库?

最佳答案

虽然很讨厌,PulseAudio基本上完全按照您描述的方式工作(使用异步 API,而不是简单的 API)。

除非你想做的事情涉及低延迟或高级声音工作,在这种情况下你可能想看看 JACK Audio Connection Kit .

关于c - 使用基于事件的接口(interface)播放 OS X/Linux 音频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9982756/

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