如何在 Linux 上用 C++ 播放 .wav 文件?
Posted
技术标签:
【中文标题】如何在 Linux 上用 C++ 播放 .wav 文件?【英文标题】:How do I play .wav files in C++ on Linux? 【发布时间】:2016-06-24 04:26:22 【问题描述】:我有一个关于在 C++ 中播放 .wav 文件的问题。我正在寻找一种在 Linux 和 Windows 上播放它的方法,我想在一个功能结束时分解它,你知道这个示例吗?
感谢您的任何回答:)!
我来自德国,请不要对我的语法或拼写生气:D。
【问题讨论】:
使用网络搜索查找内容。或者,从现有程序的源代码中获取灵感。 【参考方案1】:有几种方法可以做到这一点。
最简单、最丑陋和最骇人听闻的方法是直接写入位于/dev/snd/
的声音设备。但是,这实际上取决于您的 linux 发行版,而一些现代发行版不再允许您这样做。一般来说,对/dev/
设备的直接读/写正在逐渐消失。 Here is a question answering this.
很长一段时间以来,“官方”的方式是使用使用 C 风格接口的 alsa 库。这通常非常棘手,充满陷阱和“变通方法”,具体取决于您的确切音频硬件。
我认为 alsa 正在逐渐被jack 取代,我希望它更易于使用。我没有这方面的经验。
我知道的最后一种方法是使用portaudio,顾名思义,它至少可以在windows、linux和osx之间移植。
所有这些库都可以让您控制您的音频硬件、初始化/设置/播放。 wav 文件的简单之处在于内容是原始 pcm,这通常是那些库使用的格式。 wav 格式通常是这样的:
[wav header] [audio data until the end of the file]
如果您可以在开始播放时管理几毫秒的垃圾,那么您也可以“安全地”发送标题以进行播放并避免对其进行解析。但是,您必须了解 PCM 格式,并且应该带来一些额外的阅读材料。
作为一个不直接涉及 C++ 的附加“技巧”,我强烈建议使用 Audacity。这是一个小程序,我看到它就像音频文件的记事本/vim。它体积小,加载速度快,允许您复制/粘贴音频片段并检测 pcm 格式。 (实际上,您只需更改 pcm 设置,直到音频“听起来”正确,但仍然有用)
【讨论】:
【参考方案2】:标题提到了 Linux,但你在帖子中提到了 Windows 和 Linux。
对于 Linux,如果您坚持使用 C++,最好使用 gstreamer。查看 gst-launch 的 gstreamer 代码。它在 Linux 机器上运行如下。
$ gst-launch filesrc location="文件位置" !波形解析!阿尔萨斯克
发件人,http://sanchayanmaity.github.io/beagleboard-xm/linux/programming/software/2014/08/07/playing-wavmp3-file-using-gstreamer-in-code.html
对于 Windows,或者如果您想在 Windows 和 Linux 上使用与操作系统无关的代码,您可以使用 SDL,http://lazyfoo.net/SDL_tutorials/lesson11/
另一种选择(跨平台、面向对象)是 SFML。查看音频 wav 文件播放示例,
http://www.sfml-dev.org/tutorials/2.0/audio-sounds.php
【讨论】:
以上是关于如何在 Linux 上用 C++ 播放 .wav 文件?的主要内容,如果未能解决你的问题,请参考以下文章
用于播放/录制音频(.wav、.ogg)的 C++ 多平台库
如何使用 PlaySound() 或任何基本函数/方法在 C++ 中同时播放 1 个以上的 .wav 声音?