Windows Vista/7:如何对输出音频混合进行采样?

Posted

技术标签:

【中文标题】Windows Vista/7:如何对输出音频混合进行采样?【英文标题】:Windows Vista/7: How to sample output audio mix? 【发布时间】:2011-04-27 17:44:29 【问题描述】:

如何访问当前波形输出样本流?

在 2006 年 12 月在 social.microsoft.com (How to record from 'Wave' or 'Stereo Mix' in Vista?) 上的一个问题中,yjslash 问道:

在 Windows XP 或更早版本上,我可以将音频流捕获到扬声器。换言之,DirectSoundCapture 能够从选定的源行进行捕获。如果选择“Wave Out Mix”或“Stereo Mix”或类似的东西作为录制源线,DirectSoundCapture 能够将音频流录制到扬声器。

Larry Osterman (MSFT)(音频团队开发人员和*** user)回复了:

您在 XP 中为此使用了哪些 API?他们应该继续在 Vista 上工作。

WASAPI 有一个特殊的 Loopback 模式,允许客户端捕获混音后的音频流,这可能也会有所帮助

关于 *** (How do I read system audio output in windows xp and windows 7?) 的一个问题还提到 WASAPI 能够对输出混合进行采样,并且从 Windows Vista 开始就可以使用。

A January of 2007 a Windows Team blog 条目提到了对音频输出进行采样的能力(出于回声消除的目的;以及 HDCP 将对其产生什么影响):

回声消除对优质内容的效果会降低吗?

我们相信 Windows Vista 为应用程序提供了对成功构建高质量回声消除功能的足够信息的访问权限。

使用什么 API 对音频输出进行采样? Vista 为应用程序提供了哪些访问权限来访问当前的音频输出流? WASAPI 的哪些功能以及如何使用它们允许对当前音频输出进行采样/捕获?

另见

Tool for exploring Windows Vista Audio device chain (tree?) MSDN: About WASAPI

【问题讨论】:

【参考方案1】:

我在 MSDN 中找到了 this (Loopback Recording) 以及 this (Capturing a Stream)。

顺便说一句,根据 MSDN,WASAPI 将不允许您捕获具有 DRM 保护的流:

Windows Vista 提供数字版权管理 (DRM)。 WASAPI 不允许环回记录包含受 DRM 保护的内容的数字流。同样,受信任的音频驱动程序不允许环回设备捕获包含受保护内容的数字流。 Windows Vista 仅允许受信任的驱动程序播放受保护的内容。有关受信任的驱动程序和 DRM 的详细信息,请参阅 Windows DDK 文档。

【讨论】:

鉴于 Vista 团队的断言“我们相信 Windows Vista 为应用程序提供了对成功构建高质量回声消除功能的足够信息的访问权”,如何构建高质量的回声取消功能?它必须有一个 API。 我认为他们(msdn)的意思是他们为您提供了您自己实现算法所需的所有信息。但我认为他们没有为此提供 API。您可以查看 mumble (sourceforge.net/projects/mumble) 或 Speex (speex.org) 等开源项目的实现,也可以查看 citeseerx (citeseerx.ist.psu.edu/viewdoc/…) 学术文章中对几种算法的描述 如果唯一可用的 api (WASAPI) 有时无法捕获播放输出,我的意思是我无法实现回声消除算法。 关于 DRM 的断言并不完全正确。如果内容受到一定级别的保护(我不确定是否有任何内容实际上受到该级别的保护),系统应该会降低从环回抽头接收到的音频质量。 Larry Osterman (MSFT Audio Dev) vs MSDN 文档。准备战斗。战斗!

以上是关于Windows Vista/7:如何对输出音频混合进行采样?的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows Vista/7 中重定向应用程序的图形输出(使用 DWM)

我如何在 Windows(xp、vista、7)欢迎屏幕或锁定屏幕(如 VNC 或 Dame Ware)中进行交互

如何使用 Delphi 在控制台应用程序中激活玻璃效果(Windows Vista/7)

Windows XP 与 Vista/7 上的 MS Crypto API 行为

在 Windows Vista/7 中支持回声消除的 API

如何在 Windows 中从我的 VS2008/C++ 应用程序中执行一个程序来替换调用者并在 xp/vista/7 上运行?