我需要创建一个C ++应用程序,具有从麦克风录制音频的简单功能。
我不能说没有足够的音频API来完成这个任务!Pulse、ALSA、/dev/dsp、OpenAL等。我的问题是什么是当前的“最佳实践”API?
Pulse似乎受到大多数现代发行版的支持,但几乎没有文档。 OpenAL是否会在不同的发行版中得到支持,还是太过晦涩? 我错过了哪些内容? 难道没有简单的答案吗?
我需要创建一个C ++应用程序,具有从麦克风录制音频的简单功能。
我不能说没有足够的音频API来完成这个任务!Pulse、ALSA、/dev/dsp、OpenAL等。我的问题是什么是当前的“最佳实践”API?
Pulse似乎受到大多数现代发行版的支持,但几乎没有文档。 OpenAL是否会在不同的发行版中得到支持,还是太过晦涩? 我错过了哪些内容? 难道没有简单的答案吗?
Lennart Pottering在这里提供了一份指南:
http://0pointer.de/blog/projects/guide-to-sound-apis
基本上使用alsa的“安全”子集,那么其他重要的应用程序也应该能够正常工作。
除此之外,OpenAL也可以在Linux上运行。
编辑: 此外,pulseaudio具有相当不错的doxygen生成的文档here和一些其他的东西here。其中一些实用程序是很好的示例,你可以在gitwebhere中查看它们。
此外,我编写了一些使用pulseaudio进行音频输入的代码,你可以在here查看它。但是,我不确定是否完全正确处理了所有内容,我知道我缺少处理某些情况的代码...但这应该能够让你开始使用pulse。
没有简单的答案,最佳实践取决于您的应用程序将接触到的上下文和特定用例。
为了编程最方便且面向最广泛的受众,我会选择 GStreamer,因为它快速简单、与 GNOME 和 Ubuntu 集成良好,并支持各种音频子系统和配置。它非常灵活。
例如,命令如下:
gst-launch autoaudiosrc ! audioconvert ! flacenc ! filesink location="foo.flac"
将从麦克风输入创建一个 .flac 文件,无论音频系统是 Pulse、ALSA 还是 ESD。可以使用 c/gobject 绑定编写等效的管道,如此处所述 here。
p.s. 上述命令需要 gstreamer-tools
包。
GStreamer将允许您和最终用户在声音捕获方面拥有最大的灵活性,但其跨平台可行性并不是很好,特别是在OS X上。