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