简单的C++声音API
Simple C++ Sound API
我的商业嵌入式C++Linux项目需要同时播放各个音量级别的wav文件和音调。声音的几个例子:
•每次用户按下屏幕时都会发出"点击"的声音,以用户指定的音量播放
•以最大音量播放警告声音
•其他应用程序以应用程序指定的音量级别(0-100%)请求的警告音
•未来支持以用户指定的音量播放MP3播放器和/或视频(带声音)。播放歌曲/视频时,所有其他声音都应继续
我们使用Qt作为我们的UI框架,它支持QtMultedia和Phonon。然而,我听说前者在Linux上有不稳定的声音支持,而后者是一个旧版本,可能会在即将发布的Qt中被弃用。
我做了一些研究,以下是我遇到的一些API:
KDE Phonon
SFML
PortAudio
SDL_混合器
OpenAL Soft
FMOD(尽管我更愿意避免许可费)
ALSA(可能有点太低了…)
其他注意事项:跨平台不是必需的,但更可取。我们希望尽可能地限制依赖关系。在可预见的未来,不需要3D音频或特效等高级功能。我的团队没有太多的音频经验,所以易用性很重要。
这些对我的申请来说是不是有些过头了?哪一个看起来最合适?
更新:事实证明,由于其他原因,我们已经依赖SDL,所以我们决定使用SDL_Mixer。然而,对于其他嵌入式应用程序,由于它们的依赖性很小,我也会花很长时间研究PortAudio/libsndfile组合。
libao简单、跨平台、Xiphy好。还有文档!
用法概述如下-简单用法如下:
- 初始化(
ao_initialize()
) - 呼叫
ao_open_live()
或ao_open_file()
- 使用
ao_play()
播放声音 - 使用
ao_close()
关闭设备/文件,然后使用ao_shutdown()
进行清理
选择PortAudio。对于没有不必要的开销(如复杂的流媒体管道或3D)的纯音频,它是最好的库。此外,您还有非常好的跨平台支持。它被几个专业的音频节目使用,质量非常高。
我已经一次又一次地使用SDL_Mixer,可爱的库,它应该很好地满足您的需求,许可证是灵活的,并且有大量的文档。我也尝试过SFML,虽然它更现代,文档也更丰富,但我发现使用它有点笨重,即使两个库非常相似imo SDL_Mixer是最好的。
不过,你可能也想看看我几周前发现的这个http://www.mpg123.de/,我还没有深入研究过多,但它非常轻量级,而且许可证也很灵活。
有一个名为STK的声音库可以满足您的大部分需求:
https://ccrma.stanford.edu/software/stk/faq.html
别忘了:
-
FFmpeg:是一个完整的跨平台解决方案,用于录制、转换和流式传输音频和视频。
-
GStreamer:是一个用于构建媒体处理组件图的库。它支持的应用程序从简单的Ogg/Vorbis播放、音频/视频流到复杂的音频(混合)和视频(非线性编辑)处理。
- 用于访问容器<T>数据成员的正确 API
- 如何使用Luacneneneba API正确读取字符串和表参数
- C++MySQL C api用户输入行
- 如何使用 AWS Transcribe C++ API 中的'StartTranscriptionJobRequest'?
- 将std::string传递给WriteConsole API
- Xaudio2在更改缓冲区或循环时弹出声音
- EvtExportLogneneneba API正在将远程计算机的事件日志保存到远程PC本身.如何将其保存到主机
- 在gtest.中使用fff.h模拟系统API
- 有没有任务栏API可以立即应用注册表更改
- C++win32 API创建多个类似视口的窗口
- 如何更改'a'声音?
- 使用libcurl提交批量url的正确BING Api POST url是什么
- 如何将真正的字符串从python c-api转换为python脚本
- 如何使用 ALSA API 在应用程序中在单声道和立体声之间切换声音输出?
- C/C++声音操作系统API
- 跨平台声音 API
- 如何使用 WaveOutwaveIn API 录制和播放声音
- 简单的C++声音API
- 用于在Windows上捕获声音的API
- 将波形加载到内存中,然后使用Win32 API异步播放声音