Sound API Ubuntu Linux
Sound API Ubuntu Linux
我想编写一些本机C/C++代码,该代码获取一些未压缩的PCM音频数据,并通过Ubuntu Linux 12.04上的扬声器播放。 你能告诉我安装的不同默认音频 API/库是什么吗? 它们的低级架构是什么,它们如何与内核交互?(哪些系统调用)
(我听说过不同的术语,如ALSA,PulseAudio,OSS等,但我真的不清楚哪个做什么以及如何将它们组合在一起。
上,你有很多 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 美元的许可证费用。
- 分段 Linux Ubuntu 中的 g++ 错误,但在 Windows 中的 g++/MingW 中,在 C++ 中打
- 在Linux/Ubuntu中编译openCV应用程序时,如何解决未定义的引用cv:..?
- C 在Linux Ubuntu上检查Internet连接
- Linux Ubuntu 中的文件内输出 unicode 符号
- 如何在Linux(Ubuntu)上获得C/C 的完整文档路径
- Qt error 无法在 linux ubuntu 16.04 上找到 -lQtCore -lQtCore -lQtGu
- CMake 在 Linux (Ubuntu) 上使用"target_include_directories"的方式与 OS X 不同
- 未选中C++返回语句.Linux
(UBUNTU 16.04) 下的
- Linux Ubuntu 12.04 NiTE上的ROS hydro+OpenNI2+NiTE2无法初始化
- 捕获Linux/Ubuntu(屏幕捕获 鼠标/键盘事件)中的窗口事件
- 在Linux Ubuntu Server上提升11.10(VPS)使用ASIO编译C
- 如何在Linux(Ubuntu)上安装GCC 5.1
- Linux/Ubuntu中的OpenCV安装
- 如何在Linux Ubuntu 14.04 LTS上设置freeglut库
- 如何在Linux(Ubuntu)上将SDL静态链接到我的a.out
- Soci 作为 linux/ubuntu 上的静态库
- 在 linux (ubuntu) 上编译 SFML
- 在Linux(Ubuntu 13.10和14.04)下运行Qt C++代码,而无需QtCoreApplication/Q
- 将命令行输出打印到Linux(Ubuntu)的文本文件中
- 如何在QtCreator(Linux Ubuntu)中编译和运行一个随机的单个C++文件