用于原始PCM的简单跨平台免费音频库?

时间:2010-02-07 14:22:07

标签: c++ qt audio cross-platform

我正在编写一个基于Qt的跨平台程序,它不时需要播放外部(我的控制之外)提供的音频作为原始PCM。确切的格式是16位小端PCM,具有各种常见的采样率。

我的第一个明显的想法是使用Qt自己的Phonon进行音频播放,但这种方法存在两个问题:

  1. 据我所见,Phonon不支持无头PCM数据。我不得不破解这个并且每次回放开始时伪造一个WAV标题。不过,这不是一个表明。
  2. 更重要的是:似乎没有任何方法可以控制Phonon(及其后端,如xine,PulseAudio,DirectX等)预先缓冲。它的默认行为似乎是5秒的预缓冲,对我来说太多了。我宁愿大约1秒钟,我一定希望能够控制它!

我目前正在关注Gstreamer,FFMPEG和libvlc。有什么想法吗?由于我的音频格式非常简单,我不需要花哨的混音(只是音量控制),我想要一个 简单,免费(在自由中),跨平台且广泛可用的库。

3 个答案:

答案 0 :(得分:6)

Qt 4.6有新的QtMultimedia模块。

https://doc.qt.io/archives/4.6/qtmultimedia.html

QAudioOutput类似乎可以做你想要的 - 它只是播放原始的PCM数据。

答案 1 :(得分:3)

ffmpeg,libvlc和gstreamer具有超出原始pcm的能力,例如编解码器支持。

出于您的目的,SDL(example 1example 2),OpenAL,QAudioOutput就足够了。 SDL可能是最受欢迎的选择。

另外,为什么要控制缓冲?缓冲很多意味着更少的中断和更低的功耗。

答案 2 :(得分:1)

你看过OpenAL吗?