4

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

我有你需要监听音量变化的 IAudioSessionControl2 和 IAudioSessionManager2 实例,但实际上获取当前音量是难以捉摸的。

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


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

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

4

2 回答 2

3

实际上 IAudioSessionManager::GetSimpleAudioVolume 就是你要找的。

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

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

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

于 2009-07-18T16:43:06.800 回答
1

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

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

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

于 2009-07-15T01:53:07.353 回答