简单的C ++ Sound API

时间:2012-04-02 17:41:38

标签: c++ linux qt audio

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

•每次用户按下在用户指定音量下播放的画面时,“点击”声音 •以最大音量播放警告声 •其他应用程序在app指定的音量级别(0-100%)要求的警告音 •未来支持用户指定音量的MP3播放器和/或视频播放(带声音)。播放歌曲/视频时,所有其他声音应继续。

我们正在使用Qt作为我们的UI框架,它具有QtMultimedia和Phonon支持。但是,我听说前者在Linux上有不稳定的声音支持,后者是旧版本,可能会在即将推出的Qt版本中弃用。

我做过一些研究,这里有一些我遇到的API:
KDE Phonon
SFML
PortAudio
SDL_Mixer
OpenAL Soft
FMOD(虽然我更愿意避免许可费) ALSA(可能有点太低......)

其他考虑因素: 跨平台不是必需的,但是首选。我们希望尽可能地限制依赖关系。在可预见的未来,不需要3D音频或特殊效果等高级功能。我的团队没有太多的音频体验,因此易用性非常重要。

这些对我的申请有些过分吗?哪个看起来最合适?

更新 事实证明,由于其他原因我们已经依赖SDL,所以我们决定使用SDL_Mixer。但是,对于其他嵌入式应用程序,由于它们的依赖性最小,我还需要很长时间使用PortAudio / libsndfile组合。

5 个答案:

答案 0 :(得分:3)

去PortAudio。对于简单的音频,没有不必要的开销,如复杂的流媒体管道或3D,它是最好的lib。此外,您还拥有非常好的跨平台支持。它被几个专业音频节目使用,并且质量非常高。

答案 1 :(得分:2)

libao简单,跨平台,Xiphy善良。 还有documentation

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

我一次又一次地使用SDL_Mixer,可爱的库,它应该很好地满足您的需求,许可证是灵活的,并且有大量文档记录。我也尝试过SFML,虽然更现代和相当文档,我发现它有点笨重和繁琐的工作,即使这两个库非常相似。 imo SDL_Mixer是最好的

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

答案 4 :(得分:0)

不要忘记:

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

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