播放音频的库?-C++

Libraries for Playing Audio? - C++

本文关键字:-C++ 音频 播放      更新时间:2023-10-16

是否有任何C++(LGPL或类似LGPL)声音库允许我通过纯粹指定频率和音量等内容来播放声音?

我的目标平台是Linux/Uubuntu,我并不真正关心跨平台。

如果我能发送一个声音数组,它就能把它压缩成一个常见的声音文件,比如mp3,那就太好了。

我正在寻找类似OpenGL的东西,你可以"画"出声音,然后播放。我听说过OpenAL,但它似乎只是一个加载和播放声音的库。

大多数简单和低级的音频库(如OpenAL、SDL等)都可以很容易地播放PCM波形。你用你想播放的波形填充一个缓冲区,然后播放它。要用频率和音量之类的东西制作波形,你需要写一些代码(可能是简单波形的几行),并且需要知道基本的三角法。

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

SDL(或简单直接媒体层)也是跨平台和面向游戏的,但它提供的远不止音频。但它提供的任何功能都是非常基本的,这是有意的,也是经过设计的。SDL是一个平台抽象层。它的音频功能同样非常基本和低级;仅提供播放和记录PCM波。当然,还有一些扩展库(例如SDL_mixer)具有更多的功能。

参考文献:

  1. 维基百科上的OpenAL
  2. OpenAL主页(截至2013年8月5日,似乎已关闭)
  3. OpenAL Soft,可从创意实验室获得的OpenAL库的分支
  4. SDL主页
  5. SDL_混合器

据我所知,这两个项目都附带了文档和示例以及它们的源代码,所以您可能想要获得它们的源码并开始试验。

如果我已经正确理解了你想要做什么,这两个库中的任何一个都可以很容易地做你想要的事情,但在我个人看来,SDL更简单、更容易使用(除非你想要3D位置音频和效果。)