【问题标题】:Sound API Ubuntu Linux声音 API Ubuntu Linux
【发布时间】:2012-04-28 10:08:03
【问题描述】:

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

(我听说过不同的术语,如 ALSA、PulseAudio、OSS 等,但我并不清楚它们的作用以及它们如何组合在一起。)

【问题讨论】:

    标签: c++ c linux audio ubuntu


    【解决方案1】:

    在 Linux 上,您有 LOTS 的 Linux 音频 API 可供选择。 Here is a graph I made a few years ago demonstrating the relationships among the various Linux audio APIs.

    但是,如果您只针对 Ubuntu Linux 并使用 C/C++,并且不需要太花哨的东西(只需获取原始 PCM 数据并将其推送到扬声器),我建议您使用 PulseAudio 并坚持“简单”的 API。 A trivial example can be found here。这是获得概念验证工作阻力最小的途径。

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        【解决方案3】:

        FMOD 应该很适合你。它很容易集成到任何 C++ 项目(以及更多语言)并在 Windows、Linux(32 位和 64 位)、Mac、Android、PS3、Xbox 等环境下运行。FMOD Ex 同时提供低级 API 和数据驱动 API。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-06-28
          • 2019-04-11
          • 2017-09-04
          • 1970-01-01
          • 1970-01-01
          • 2020-06-06
          • 2012-06-13
          相关资源
          最近更新 更多