Sound API Ubuntu Linux

Sound API Ubuntu Linux

本文关键字:Linux Ubuntu API Sound      更新时间:2023-10-16

我想编写一些本机C/C++代码,该代码获取一些未压缩的PCM音频数据,并通过Ubuntu Linux 12.04上的扬声器播放。 你能告诉我安装的不同默认音频 API/库是什么吗? 它们的低级架构是什么,它们如何与内核交互?(哪些系统调用)

(我听说过不同的术语,如ALSA,PulseAudio,OSS等,但我真的不清楚哪个做什么以及如何将它们组合在一起。

在 Linux

上,你有很多 Linux 音频 API 可供选择。这是我几年前制作的图表,展示了各种 Linux 音频 API 之间的关系。

但是,如果您只针对Ubuntu Linux并使用C/C++,并且您不需要任何太花哨的东西(只需获取原始PCM数据并将其推送给扬声器),我建议您使用PulseAudio并坚持使用"简单"API。可以在这里找到一个微不足道的例子。这是使概念验证工作的阻力最小的路径。

简单来说,ALSA为Linux中的音频提供了低级基础设施,而Pulse则提供了更高(对桌面更友好)的基础设施。就大多数主流Linux发行版(包括Ubuntu)而言,OSS已经过时了。

您询问有关系统调用的信息。您不会通过系统调用在 Linux 中使用音频。如果您选择直接使用 ALSA(对于简单的音频播放来说不是一个好主意),您将使用其用户空间库 libasound2(甚至 OSS 也会通过/dev/文件而不是系统调用使用)。

如果您仅面向现代 Linux 发行版,请考虑使用 Pulse API。如果你想更灵活地选择你所针对的发行版和跨平台支持的潜力,你可以尝试一个抽象出特定于操作系统的音频API的库 - 例如,PortAudio(http://www.portaudio.com/)。

如果您从未做过任何音频开发,您可能会发现像PortAudio这样的库比直接寻址PulseAudio更容易使用。

FMOD应该对你来说很棒。它很容易集成到任何C++项目(以及更多语言)中,并在Windows,Linux(32位和64位),Mac,Android,PS3,Xbox等下运行。此外,FMOD Ex 提供了低级 API 和数据驱动的 API。

如果您不打算通过应用程序赚钱,则可以免费使用。否则,您可能需要支付大约 100 美元的许可证费用。