在 C++ 中连续流式传输 PCM 数据?

Posted

技术标签:

【中文标题】在 C++ 中连续流式传输 PCM 数据?【英文标题】:Continuous Streaming PCM data in C++? 【发布时间】:2009-12-08 18:38:45 【问题描述】:

我有一个从手机捕获的 PCM 音频流,我想播放它。

我正在尝试找到一种用 C++ 播放此音频的轻量级方法。

我已经可以在波头上打一个耳光并创建一个可以在任何媒体播放器中播放的文件,但我想在文件流入时实时播放它。我想避免将文件写入光盘只是为了读取再说一遍,我也不想在停止一个文件并开始另一个文件时暂停音频。

我意识到 OpenAL 提供了音频流功能,但我希望有更简单的东西。我只需要播放单通道 PCM 流。

有谁知道可以做到这一点的轻量级、免费(用于商业用途)库或 Windows API?

【问题讨论】:

【参考方案1】:

在 Windows 中使用 waveOut API

【讨论】:

完美,正是我想要的!【参考方案2】:

它看起来像patent has expired,所以应该没有法律上的复杂性。专利的美妙之处在于它公开了算法。

【讨论】:

但是,如果我使用 FMOD 播放文件,我将需要付费,因为该软件仍在版权保护下。【参考方案3】:

播放单个 PCM 流并不是那么简单,唉。它不是那么难。我没有使用过 OpenAL,但在标准 Windows 音频、XAudio2 或 DirectSound 下,它易于使用双缓冲。在从流中填充缓冲区 2 的同时播放缓冲区 1。然后在填充buffer1的同时播放buffer2,以此类推。

【讨论】:

以上是关于在 C++ 中连续流式传输 PCM 数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中播放来自服务器的流式 PCM 数据?

下载数据时如何流式传输音频?

从 C++ 程序流式传输数据?

如何从 Wave Out 中捕获 PCM 数据

如何播放来自服务器的流式 PCM 数据,如 Android AudioTrack 类?

我将如何使用 NAudio 压缩来自麦克风的传入 PCM 数据?