如何从 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
Android:Creating Wave file using Raw PCM, wave file不播放