Windows 7上各个程序的峰值计

jon*_*sdf 10 windows audio wasapi

是否有可能获得Windows 7上各个程序的峰值仪表读数,如果是,如何获得?

使用WASAPI,可以通过环回设备捕获整个系统音频,但这并不区分不同程序的输出.这个问题涉及为单个指定应用程序捕获音频,但在处理捕获所有单独播放音频的程序时,答案似乎过高.这必须是可能的,因为SndVol可以做到这一点,如下图所示.问题是它是如何完成的?它是通过未暴露的API调用完成的,还是实际上可以通过WASAPI实现这样的东西?

在此输入图像描述

谢谢.

Rom*_* R. 12

您正在枚举音频会话和获取IAudioSessionControl接口(MSDN 代码段).缺少的部分是你可以查询你已经持有的IAudioMeterInformation界面IAudioSessionControl.

如果音频端点支持峰值表,您将能够获得此接口,并IMeterInformation::GetPeakValue用于单个会话.这就是SndVol应该做的事情.

这是一段代码:

CComPtr<IAudioSessionControl> pSessionControl;
...
CComQIPtr<IAudioMeterInformation> pMeterInformation = pSessionControl;
FLOAT fPeakValue;
pMeterInformation->GetPeakValue(&fPeakValue);
_tprintf(_T("nSessionIndex %d, fPeakValue %.2f\n"), nSessionIndex, fPeakValue);
Run Code Online (Sandbox Code Playgroud)