Sound API Ubuntu Linux

And*_*zos 4 c c++ linux audio ubuntu

我想写一些原生的C/C++代码,它需要一些未压缩的PCM音频数据,并通过Ubuntu Linux 12.04上的扬声器播放.你能告诉我安装的默认音频API /库是什么吗?他们的低级架构是什么以及它们如何与内核交互?(哪个系统调用)

(我听说过不同的术语,如ALSA,PulseAudio,OSS等等,但我并没有清楚地了解它们在哪些方面以及如何组合在一起.)

Ric*_*ond 5

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

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

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

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


Mul*_*ike 5

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

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