在Linux下,C ++音频捕获API的最佳实践是什么?

10

我需要创建一个C ++应用程序,具有从麦克风录制音频的简单功能。

我不能说没有足够的音频API来完成这个任务!Pulse、ALSA、/dev/dsp、OpenAL等。我的问题是什么是当前的“最佳实践”API?

Pulse似乎受到大多数现代发行版的支持,但几乎没有文档。 OpenAL是否会在不同的发行版中得到支持,还是太过晦涩? 我错过了哪些内容? 难道没有简单的答案吗?


不幸的是,您可能会发现自己需要支持多种捕获方法 - 不同的人使用不同的声音设置,并且通常有一个比能够使用特定应用程序更重要的原因。当然,这取决于您的应用程序受众的类型。 - Cascabel
3个回答

4

Lennart Pottering在这里提供了一份指南:

http://0pointer.de/blog/projects/guide-to-sound-apis

基本上使用alsa的“安全”子集,那么其他重要的应用程序也应该能够正常工作。

除此之外,OpenAL也可以在Linux上运行。

编辑: 此外,pulseaudio具有相当不错的doxygen生成的文档here和一些其他的东西here。其中一些实用程序是很好的示例,你可以在gitwebhere中查看它们。

此外,我编写了一些使用pulseaudio进行音频输入的代码,你可以在here查看它。但是,我不确定是否完全正确处理了所有内容,我知道我缺少处理某些情况的代码...但这应该能够让你开始使用pulse。


@slashmais Lennart的网站一度宕机,现在已经恢复正常。 - Spudd86

1

没有简单的答案,最佳实践取决于您的应用程序将接触到的上下文和特定用例。

为了编程最方便且面向最广泛的受众,我会选择 GStreamer,因为它快速简单、与 GNOME 和 Ubuntu 集成良好,并支持各种音频子系统和配置。它非常灵活。

例如,命令如下:

gst-launch autoaudiosrc ! audioconvert ! flacenc ! filesink location="foo.flac"

将从麦克风输入创建一个 .flac 文件,无论音频系统是 Pulse、ALSA 还是 ESD。可以使用 c/gobject 绑定编写等效的管道,如此处所述 here

p.s. 上述命令需要 gstreamer-tools 包。


0

GStreamer将允许您和最终用户在声音捕获方面拥有最大的灵活性,但其跨平台可行性并不是很好,特别是在OS X上。


GStreamer并不适合所要求的用例,因为这不是它的设计目的...它是一个多媒体框架,因此支持像totem和rhytmbox或PiTiVi(非线性视频编辑器)这样需要处理大量媒体格式等内容的应用程序。对于这个问题来说,使用它会过度杀伤和复杂化。 - Spudd86

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接