3

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

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

如果我可以发送一组声音并且它能够将其压缩成一个常见的声音文件,例如 mp3,那就太好了。

我正在寻找类似于 OpenGL 的东西,您可以在其中“绘制”声音并播放它。我听说过 OpenAL,但这似乎只是一个用于加载和播放声音的库。

4

1 回答 1

6

大多数简单和低级的音频库(例如 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,可从 Creative Labs 获得的 OpenAL 库的一个分支
  4. SDL 主页
  5. SDL_mixer

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

如果我已经正确理解了您想要做的事情,那么这些库中的任何一个都可以轻松地完成您想要做的事情,但在我个人看来,SDL 更简单且更易于使用(除非您想要 3D 位置音频和效果。)

于 2013-08-05T19:39:02.947 回答