【问题标题】:Simple C++ Sound API简单的 C++ 声音 API
【发布时间】:2012-04-16 09:19:12
【问题描述】:

我的商业嵌入式 C++ Linux 项目需要同时以单独的音量级别播放 wav 文件和音调。声音的几个例子:

• 每次用户按下以用户指定音量播放的屏幕时都会发出“咔哒”声
• 以最大音量播放警告音
• 其他应用程序在应用程序指定的音量级别 (0-100%) 请求的警告音
• 未来以用户指定的音量支持 MP3 播放器和/或视频播放(有声)。播放歌曲/视频时,所有其他声音应继续播放。

我们使用 Qt 作为我们的 UI 框架,它支持 QtMultimedia 和 Phonon。但是,我听说前者在 Linux 上的声音支持参差不齐,而后者是旧版本,可能会在即将发布的 Qt 版本中被弃用。

我做了一些研究,下面是我遇到的一些 API:
KDE Phonon
SFML
PortAudio
SDL_Mixer
@987654325 @
FMOD(虽然我更愿意避免许可费)
ALSA(可能有点太低级了...)

其他注意事项: 跨平台不是必需的,但首选。我们希望尽可能地限制依赖关系。在可预见的未来,不需要像 3D 音频或特殊效果这样的高级功能。我的团队没有太多的音频经验,所以易用性很重要。

这些对我的应用程序来说是否过大?哪个看起来最合适?

更新: 事实证明,由于其他原因,我们已经依赖 SDL,所以我们决定使用 SDL_Mixer。然而,对于其他嵌入式应用程序,我也会花很长时间使用 PortAudio/libsndfile 组合,因为它们的依赖关系最小。

【问题讨论】:

标签: c++ linux qt audio


【解决方案1】:

有一个名为 STK 的声音库可以满足您的大部分要求:

https://ccrma.stanford.edu/software/stk/faq.html

【讨论】:

    【解决方案2】:

    我一次又一次地使用 SDL_Mixer,可爱的库,它应该可以很好地满足您的需求,许可证很灵活,并且有大量文档。我也尝试过 SFML,虽然更现代且文档齐全,但即使两个库非常相似,我也发现使用起来有点笨重和麻烦。 imo SDL_Mixer 是最好的

    但是您可能还想看看我几周前发现的这个http://www.mpg123.de/,我没有深入研究它,但它非常轻量级,而且许可证也很灵活。

    【讨论】:

    • 我认为我们将试一试 SDL_Mixer,因为我的一位同事在这方面有一些经验。一旦我们得到一些工作,我会更新这个问题。谢谢!
    • 事实证明我们已经因为其他原因依赖于 SDL,所以我们将使用 SDL_Mixer。然而,对于其他人阅读这篇文章,我也会在 PortAudio 上花费很长时间,尤其是对于嵌入式项目。
    【解决方案3】:

    别忘了:

    • FFmpeg:是一个完整的跨平台解决方案,用于录制、转换和流式传输音频和视频。

    • GStreamer:是一个用于构建媒体处理组件图的库。它支持的应用范围从简单的 Ogg/Vorbis 播放、音频/视频流到复杂的音频(混合)和视频(非线性编辑)处理。

    【讨论】:

    • 谢谢,我重新阅读了这个问题,一件很清楚的事情是他们在磁盘中有空间用于我建议的解决方案之一。它们并没有那么大,我在我的嵌入式项目中都使用过几次。不言而喻,学习其中一项技术可以为您的编程库增加一项出色的技能。
    【解决方案4】:

    libao 很简单,跨平台,Xiphy 的优点。 还有documentation

    用法概述here - 简单用法如下:

    【讨论】:

    • 然而,它的许可证是 GPL,因此它可能不符合 OP 的要求。
    • 啊,您可能是对的,即使问题中当前未指定,“商业”可能意味着 GPL 已退出。
    【解决方案5】:

    选择 PortAudio。对于没有诸如复杂流管道或 3D 等不必要开销的纯音频,它是最好的库。此外,您还有非常好的跨平台支持。它被多个专业音频程序使用,并且质量非常高。

    【讨论】:

    • 看起来 PortAudio 只有几个依赖项,这很好。然而,我们的大部分声音都是 wav 文件,它不支持读取或写入格式化的音频文件。
    • 您可以使用libsndfile 来加载波形文件。它的界面本质上是模仿标准 C 文件 I/O 的,带有一些额外的格式 (s/g) 设置功能。 libsnfile+portaudio 的组合为您提供了一种非常灵活、便携和轻量级的方式来播放 wav 文件,并且可能是嵌入式系统的一个很好的折衷方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多