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

时间:2016-06-24 04:26:22

标签: c++ linux windows playback audio-player

我有一个关于在C ++中播放.wav文件的问题。我在Linux和Windows上搜索一种方法来播放它,我希望在一个函数结束时分解它,你知道一个样本吗?

感谢您的任何答案:)!

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

2 个答案:

答案 0 :(得分:3)

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

最简单,最丑陋和最黑客的方法是直接写入位于/dev/snd/的声音设备。然而,这实际上取决于您的Linux发行版,而一些现代版本不再允许您这样做。通常,对/dev/设备的直接读/写正在逐渐消失。 Here is a question answering this

很长一段时间,"官员"方法是使用alsa库,它使用C风格的界面。它通常非常棘手,充满了陷阱和#34;变通办法"这取决于您的确切音频硬件。

我认为alsa逐渐被jack取代,我希望它更容易使用。我没有这方面的经验。

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

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

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

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

作为一个添加的"技巧"我没有直接关注C ++,我强烈建议使用Audacity。这是一个小程序,我看到像音频文件的记事本/ vim。它很小,加载速度快,允许您复制/粘贴音频片段并检测pcm格式。 (实际上,你只需更改pcm设置,直到音频"声音"正确,但仍然有用)

答案 1 :(得分:1)

标题提到Linux,但后来你在帖子中提到了Windows和Linux。

  • 对于Linux,如果你坚持使用C ++,最好使用gstreamer。查看gst-launch的gstreamer代码。它在Linux机器上运行如下。

    $ gst-launch filesrc location ="文件位置" ! wavparse! alsasink

来自,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/