如何从 Wave Out 中捕获 PCM 数据

Posted

技术标签:

【中文标题】如何从 Wave Out 中捕获 PCM 数据【英文标题】:How to capture PCM data from Wave Out 【发布时间】:2008-09-21 18:19:30 【问题描述】:

如何以编程方式捕获音频?我正在实现一个在网络上实时流式传输桌面的应用程序。视频部分完成。我需要实现音频部分。我需要一种从声卡获取 PCM 数据以馈送到我的编码器的方法(使用 Windows 媒体格式实现)。

我认为答案与 Win32 API 中的 openMixer()、waveInOpen() 函数有关,但我不确定我该怎么做。

如何打开必要的通道以及如何从中读取PCM数据?

提前致谢。

【问题讨论】:

【参考方案1】:

新的 Windows Vista 核心音频 API 明确支持这一点(称为环回录制),因此如果您可以使用仅 Vista 的应用程序,那么这是可行的方法。

有关如何执行此操作的说明,请参阅 MSDN 上的 Loopback Recording 文章。

【讨论】:

【参考方案2】:

我认为没有直接的方法可以使用操作系统来执行此操作 - 这是声卡上可能(或可能不)存在的功能。一些声卡有一个环回接口——Creative 称之为“你听到什么”。您只需选择它作为输入而不是麦克风,然后使用您已经知道的普通 waveInOpen() 从中记录。

如果声卡没有这个功能,那么我认为你不走运,除了做一些疯狂的事情,比如制作自己的驱动程序。或者,您可以说服您的用户将电缆从扬声器输出连接到线路输入 :)

【讨论】:

以上是关于如何从 Wave Out 中捕获 PCM 数据的主要内容,如果未能解决你的问题,请参考以下文章

PCM Wave 文件中的数据长度使用 MemoryStream 和 WaveFileWriter

WAVE PCM soundfile format

Android:Creating Wave file using Raw PCM, wave file不播放

使用 PyDub 时出错:WAVE 格式不支持 pcm_s8 编解码器

Kinect 音频 PCM 值

何时使用 Wave 可扩展格式?