播放音频的库?- C++

3

有没有任何C++(LGPL或类似于LGPL的)声音库,可以仅通过指定频率和音量等内容来播放声音?

我的目标平台是Linux / Ubuntu,而且我并不关心跨平台。

如果我能够发送一个声音数组,并将其压缩成通用的声音文件,例如mp3,那就太好了。

我正在寻找类似于OpenGL的东西,您只需“绘制”声音即可播放。 我听说过OpenAL,但那似乎只是用于加载和播放声音的库。


2
大多数简单和低级别的音频库(例如OpenAL,SDL等)可以轻松地播放PCM波形。您可以使用缓冲区填充要播放的波形,然后播放它。要从频率、音量等内容生成波形,您需要编写一些代码(对于简单波形可能只需几行),并且需要了解基本的三角函数知识。 - yzt
@yzt 你知道有关OpenAL的参考资料吗?我只能找到如何加载wav文件的内容... - Jeroen
听起来你在想一些 Basic 版本中可用的 PLAY 命令。请查看 https://dev59.com/bWXWa4cB1Zd3GeqPQcoV。 - Ben Voigt
@Binero:播放包含音频样本的缓冲区是它最基本的功能(甚至比加载WAV文件还要简单)。你只需要填充缓冲区,设置参数(采样率、每个样本的位数等),然后在设置好播放设备后进行播放。不幸的是,我已经有几年没有使用OpenAL了,所以无法给出更详细的答案。但我相信他们的发布版本或网络上都有示例,即使从他们的文档中学习和实践也不会超过几个小时。 - yzt
@yzt 问题在于大多数程序使用一些魔法来读取波形文件,因此我实际上不知道它们包含什么... - Jeroen
显示剩余2条评论
1个回答

6

大多数简单且低级的音频库(例如OpenAL、SDL等)可以轻松播放PCM波形。您可以用所需播放的波形填充缓冲区,然后播放它。要从频率和音量等内容创建波形,您需要编写一些代码(对于简单的波形可能只需要几行),并需要了解基本的三角函数。

OpenAL是一个面向3D游戏的跨平台API。它的接口类似于OpenGL,并提供了管理虚拟3D环境中的音频源(位置、速度等)的功能,并提供一些声音和环境效果(混响等)。我知道它可以使用扩展解码一些压缩格式(MP3、Vorbis等),但我不确定它是否具有任何编码功能。

SDL(或Simple Direct-media Layer)也是跨平台的,并且面向游戏,但它提供的功能比音频更多。但是,它提供的任何功能都非常基本,这是有意设计的。SDL是一个平台抽象层。它的音频功能同样非常基本和低级别;仅提供播放和录制PCM波形。当然,还有一些扩展库(例如SDL_mixer)具有更多功能。

参考资料:

  1. OpenAL维基百科
  2. OpenAL主页(截至2013年8月5日似乎已关闭)
  3. OpenAL Soft,Creative Labs提供的OpenAL库分支
  4. SDL主页
  5. SDL_mixer

据我所知,这两个项目都会随源代码一起提供文档和示例,因此您可以获取它们的源代码并开始实验。

如果我正确理解了您想要做的事情,这两个库都可以轻松完成您想要的任务,但是在我个人看来,SDL更简单、更易于使用(除非您需要3D定位音频和效果)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接