2012-04-17 86 views
4

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

(我听说像ALSA,的PulseAudio,OSS不同的条款,等等,但我真的没有一个清晰的画面,其中做什么,以及如何将它们组合在一起。)

回答

3

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

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

如果您只针对现代Linux发行版,请考虑使用Pulse API。如果您希望获得更多的灵活性,您可以针对哪些发行版以及跨平台支持的潜力,可以尝试一个抽象出特定于操作系统的音频API的库,例如PortAudio(http://www.portaudio.com /)。

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

0

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

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

5

在Linux上,您有LOTS Linux音频API可供选择。但是,如果你只是针对Ubuntu Linux和使用C/C++,并且你不需要任何太花哨的东西(只需要原始的PCM数据并将它推送给扬声器),那么我会推荐使用PulseAudio和坚持“简单”的API。 A trivial example can be found here。这是获得概念验证工作最小阻力的途径。