获取音频会话的音量级别

时间:2009-07-15 01:30:04

标签: c++ com windows-7 audio

有人知道如何在Vista或7中获取音频会话*的当前音量级别吗?

我有IAudioSessionControl2和IAudioSessionManager2实例需要监听卷更改,但实际上获取当前卷是难以捉摸的。

*通过音频会话我的意思是(大致)每个应用程序的音频控件,而不是“主”一个


请注意(据我所知)IAudioSessionManager2-> GetSimpleVolume()在这里不是正确的答案。在IAudioSessionControl2中发布GUID的唯一事情是Grouping parameter,并且在GetSimpleVolume中使用它会创建新会话,而不是让您控制现有会话。

GetSimpleVolume()是我想要的,但这个设置中的参数来自哪里?

2 个答案:

答案 0 :(得分:1)

我认为 ISimpleAudioVolume 界面可以满足您的需求 它有一个名为GetMasterVolume的方法,它返回音频会话的音量 要获取接口,可以调用IAudioSessionManager :: GetSimpleAudioVolume。

对于guid参数,您可以使用在使用IAudioClient :: Initialize创建音频流时指定的参数。老实说,我不知道是否有其他方法可以获得会议的指导。

分组参数是会话所属的组的id,而不是会话的id。

答案 1 :(得分:1)

实际上IAudioSessionManager :: GetSimpleAudioVolume是您正在寻找的。

音频会话由两个(或三个)事物标识:会话guid,进程ID和跨进程标志(如果在创建流时指定了跨进程标志,则忽略进程ID)。

简单音频音量控制该音频会话中所有流的音量。它相当简单(大多数渲染框架为会话GUID指定NULL)。如果您的应用程序使用特定的会话GUID,则应该只指定应用程序正在使用的会话GUID。

但还有另外一个转折点。音量控制(sndvol.exe)在UI中将所有会话与相同的“分组参数”组合在一起 - 这不是音量控制的一部分,它是一种UI便利功能,仅适用于IE等Web浏览器 - 它存在允许第三方音频框架(指定GUID_NULL会话GUID)和WMP OCX(指定具有特定会话GUID的跨进程会话)在卷UI中共享单个滑块。