Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
简单C++;声音API 我的商业嵌入式C++ Linux项目需要同时播放单个卷级的wav文件和音调。这些声音的几个例子:_C++_Linux_Qt_Audio - Fatal编程技术网

简单C++;声音API 我的商业嵌入式C++ Linux项目需要同时播放单个卷级的wav文件和音调。这些声音的几个例子:

简单C++;声音API 我的商业嵌入式C++ Linux项目需要同时播放单个卷级的wav文件和音调。这些声音的几个例子:,c++,linux,qt,audio,C++,Linux,Qt,Audio,•“单击”声音每次用户按屏幕时都会以用户指定的音量播放 •以最大音量播放警告音 •其他应用程序以应用程序指定的音量级别(0-100%)请求的警告音 •未来支持用户指定音量的MP3播放器和/或视频播放(带声音)。播放歌曲/视频时,应继续播放所有其他声音 我们使用Qt作为我们的UI框架,它支持Qt多媒体和声子。然而,我听说前者在Linux上的声音支持参差不齐,后者是一个较旧的版本,在即将发布的Qt版本中可能会被弃用 我做了一些研究,下面是我遇到的几个API: (尽管我更愿意避免许可费) (

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

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

我做了一些研究,下面是我遇到的几个API:





(尽管我更愿意避免许可费)
(可能有点太低级了……

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

对于我的申请来说,有没有这些技巧过多?哪个看起来最合适

更新:
事实证明,由于其他原因,我们已经依赖SDL了,所以我们决定使用SDL_混合器。但是,对于其他嵌入式应用程序,由于它们的依赖性很小,我也会对PortAudio/libsndfile组合花很长时间。

有一个名为STK的声音库,可以满足您的大多数需求:


我一次又一次地使用SDL_Mixer,可爱的库,它应该能很好地满足您的需要,许可证是灵活的,并且有大量的文档记录。我也尝试过使用SFML,虽然它更为现代,而且有相当多的文档记录,但我发现即使这两个库非常相似,使用起来也有点笨重和麻烦imo SDL_混合器是最好的

不过,您可能还想看看我几周前发现的这一个,我没有对它进行太多的研究,但它非常轻量级,而且许可证也很灵活。

不要忘记:

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

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

简单、跨平台、简单。 太多了

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

  • 初始化()
  • 呼叫或
  • 播放声音使用
  • 使用关闭设备/文件,然后进行清理

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

我们在2005年至2008年的几年里在嵌入式Linux上做商业音频,并且我记得我们的C++音频栈直接与ALSA对话。然而,它的许可证是GPL,因此它可能不符合OP的要求。啊,你可能是对的,尽管问题中目前没有具体说明,“商业”可能意味着GPL不存在。谢谢,我重新阅读了这个问题,有一点很清楚,他们的磁盘中有足够的空间用于我建议的解决方案之一。它们并没有那么大,我已经在我的嵌入式项目中多次使用了这两种方法。不言而喻,学习其中一项技术会为您的编程增加一项伟大的技能。看起来PortAudio只有几个依赖项,这很好。但是,我们的大多数声音都是wav文件,它不支持读取或写入格式化的音频文件。您可以使用它来加载wav文件。它的接口本质上是模仿标准的C文件I/O接口,带有一些附加的格式(s/g)功能。libsnfile+portaudio的组合为您提供了一种非常灵活、便携和轻量级的方式来播放wav文件,对于嵌入式系统来说可能是一个很好的折衷方案。我认为我们将尝试SDL_混音器,因为我的一位同事对此有一定的经验。一旦我们有了进展,我会更新这个问题。谢谢事实证明,由于其他原因,我们已经依赖SDL了,所以我们将使用SDL_混合器。然而,对于其他阅读本文的人,我也会花很长时间学习PortAudio,尤其是对于嵌入式项目。