代码之家  ›  专栏  ›  技术社区  ›  Kevin Montrose

获取音频会话的音量级别

  •  1
  • Kevin Montrose  · 技术社区  · 17 年前

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

    我有IAudioSessionControl2和IAudioSessionManager2实例,您需要监听音量 变化 但事实证明,要获得当前的容量是很难的。

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


    请注意(据我所知)iaudiosessionmanager2-> GetSimpleVolume() 答案不对吗?在IAudioSessionControl2中发布GUID的唯一方法是 Grouping parameter ,并在getsimplevolume中使用它创建新会话,而不是为现有会话提供控件。

    获取简单卷() 是我想要的,但是参数在这个设置中来自哪里?

    2 回复  |  直到 17 年前
        1
  •  1
  •   Larry Osterman    17 年前

    实际上,IAudioSessionManager::GetSimpleAudioVolume是您要查找的内容。

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

    简单音频音量控制该音频会话中所有流的音量。这相当简单(大多数渲染框架都为会话guid指定了空值)。如果您的应用程序使用特定的会话guid,您应该只指定应用程序使用的会话guid。

    不过还有另外一个问题。音量控制(sndvol.exe)将用户界面中具有相同“分组参数”的所有会话组合在一起-这不是音量控制的一部分,它是一个用户界面便利功能,仅适用于IE等Web浏览器-它允许第三方音频框架(指定guid为空会话guid)和wmp ocx(指定交叉点)处理具有特定会话GUID的会话)以共享卷UI中的单个滑块。

        2
  •  1
  •   Roald    17 年前

    我认为 I简单音频音量 接口应该做你需要的。
    它有一个名为getmastervolume witch的方法返回音频会话的音量。
    要获取接口,可以调用IAudioSessionManager::GetSimpleAudioVolume。

    对于guid参数,可以使用在使用iaudioclient::initialize创建音频流时指定的参数。老实说,我不知道是否还有其他方法可以获得会话的GUID。

    grouping参数是要切换会话所属的组的ID,而不是会话的ID。

    推荐文章