c++ - 如何在 Linux 上用 C++ 播放 .wav 文件?

标签 c++ linux windows playback audio-player

我有一个关于在 C++ 中播放 .wav 文件的问题。我正在寻找一种在 Linux 和 Windows 上播放它的方法,我想在一个功能结束时将它分解,你知道这个的示例吗?

感谢任何回答:)!

我来自德国,请不要对我的语法或拼写感到生气:D。

最佳答案

有几种方法可以做到这一点。

执行此操作的最简单、最丑陋和最 hackish 的方法是直接写入位于 /dev/snd/ 中的声音设备。然而,这实际上取决于您的 Linux 发行版,一些现代发行版不再允许您这样做。一般来说,对/dev/ 设备的直接读/写正在逐渐消失。 Here is a question answering this .

很长一段时间以来,“官方”方法是使用使用 C 风格接口(interface)的 alsa 库。这通常非常棘手,充满陷阱和“解决方法”,具体取决于您的具体音频硬件。

我认为 alsa 正在逐渐被 jack 取代,我希望它更容易使用。我对此没有任何经验。

我知道的最后一种方法是使用 portaudio ,顾名思义,至少可以在 windows、linux 和 osx 之间移植。

所有这些库都将允许您控制音频硬件、初始化/设置/播放。 wav文件的简单之处在于内容是raw pcm,通常是那些库使用的格式。 wav 格式通常是这样的:

[wav header] [audio data until the end of the file]

如果您可以在开始播放时管理几毫秒的垃圾,您也可以“安全地”发送标题进行播放并避免解析它。但是,您必须了解 PCM 格式,并且应该带一些额外的阅读 Material 。

作为不直接涉及 C++ 的附加“技巧”,我强烈建议使用 Audacity。这是一个小程序,我看到它就像音频文件的记事本/vim。它体积小,加载速度快,允许您复制/粘贴音频片段并检测 pcm 格式。 (实际上,您只需更改 pcm 设置,直到音频“听起来”正确,但仍然有用)

关于c++ - 如何在 Linux 上用 C++ 播放 .wav 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38005588/

相关文章:

c++ - 如何专门化容器和枚举的模板

c++ - 浮点值可以加到零之和吗?

linux - 解释多线程程序的 Linux 时间命令结果 (%CPU > 100)

linux - 通俗地说,Mac OS、Ubuntu、Linux、Unix有什么区别?

c# - Windows 应用程序和 Spy++

css - 跨平台(Windows 和 OSX)的风格差异

c++ - Tesseract API,白名单设置为数字但字母出现在结果中

linux - 没有这样的文件或目录: exec of '/opt/lampp/cgi-bin/failed PERL XAMPP Ubuntu

c++ - 自定义窗口断言 - 禁用按钮 "retry"

c++ - 如何在不传递大量参数的情况下处理类的 "many small functions"的想法?