播放音频的库? - C++ [关闭]

Posted

技术标签:

【中文标题】播放音频的库? - C++ [关闭]【英文标题】:Libraries for Playing Audio? - C++ [closed] 【发布时间】:2013-08-05 19:08:38 【问题描述】:

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

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

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

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

【问题讨论】:

大多数简单的低级音频库(例如 OpenAL、SDL 等)都可以轻松播放 PCM 波形。你用你想要播放的波形填充缓冲区,然后播放它。要根据频率和音量之类的东西制作波形,您需要编写一些代码(对于简单的波形可能只有几行代码)并且需要了解基本的三角学。 @yzt 你知道关于 OpenAL 的任何参考资料吗?我唯一能找到的是如何加载 wav 文件... 听起来您正在考虑在某些 Basic 版本中提供的 PLAY 命令。看看***.com/q/11355353/103167 @Binero:播放包含音频样本的缓冲区是它所做的最基本的事情(甚至比加载 WAV 文件更简单。)您只需要填充缓冲区,设置参数(采样率,每个样本的位数等)并播放它(在设置播放设备之后)。不幸的是,我使用 OpenAL 已经好几年了,我无法给出更详细的答案。但我敢肯定,他们的版本或网络中都有示例,即使从他们的文档中学习和实践也不应该超过几个小时。 @yzt 问题是大多数程序使用一些魔法来读取波形文件,所以我实际上不知道它们包含什么...... 【参考方案1】:

大多数简单的低级音频库(例如 OpenAL、SDL 等)都可以非常轻松地播放 PCM 波形。你用你想播放的波形填充一个缓冲区,然后播放它。要根据频率和音量之类的东西制作波形,您需要编写一些代码(对于简单的波形可能只有几行代码),并且需要了解基本的三角学。

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

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

参考资料:

    OpenAL on Wikipedia OpenAL homepage(截至 2013 年 8 月 5 日似乎已关闭) OpenAL Soft,Creative Labs 提供的 OpenAL 库的一个分支 SDL homepage SDL_mixer

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

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

【讨论】:

以上是关于播放音频的库? - C++ [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

C++ 在控制台应用程序中播放视频音频

按顺序播放音频文件[关闭]

c程序播放音频文件

从服务器 Android 播放音频文件 [关闭]

在 WPF 中使用 WebBrowser 关闭窗口后音频继续播放

我们可以在后台播放音频吗