【问题标题】:Best practice for C++ audio capture API under Linux?Linux下C++音频捕获API的最佳实践?
【发布时间】:2011-02-24 08:36:24
【问题描述】:

我需要创建一个 C++ 应用程序,其中包含麦克风功能的简单录音。

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

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

【问题讨论】:

  • 您可能不幸地发现您想要支持多种捕获方法 - 不同的人使用不同的声音设置,并且通常有理由这样做,他们会认为比能够使用给定的应用程序。 (当然,这取决于您的应用程序拥有什么样的受众。)

标签: c++ linux audio audio-recording


【解决方案1】:

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

为了最大程度地简化编程和最广泛的受众,我会选择 gstreamer,因为它快速而直接,很好地集成在 gnome 和 ubuntu 中,并支持广泛的音频子系统和配置。它非常灵活。

例如,命令:

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

无论音频系统如何(Pulse、ALSA、ESD ...),都会从麦克风输入创建一个 .flac 文件。可以使用 c / gobject 绑定来编写等效的管道,如记录的here。

p.s 上面的命令需要gstreamer-tools 包

【讨论】:

    【解决方案2】:

    Lennart Pottering 在这里有一个指南:

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

    基本上使用 alsa 的“安全”子集,然后所有其他重要的子集也应该工作。

    除非 OpenAL 在 Linux 上运行

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

    我还编写了一些使用脉冲进行音频输入的代码,您可以查看它here,但是我不确定我是否完全正确地处理了所有内容,并且我知道我缺少处理某些情况的代码。 .. 但是,如果您使用脉搏,那应该可以帮助您入门。

    【讨论】:

    【解决方案3】:

    GStreamer 将让您和最终用户在声音捕捉方面获得最大的灵活性,但它的跨平台可行性并不是那么好,尤其是在 OS X 上。

    【讨论】:

    • GStreamer 也不是很擅长被要求的用例,因为这不是它的设计目的......它是一个多媒体框架,因此用于支持图腾和 rhytmbox 或 PiTiVi(非线性视频编辑器)需要处理许多媒体格式和类似的东西。对于这个问题,它是矫枉过正和过于复杂。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-29
    • 2015-12-10
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多