音量控件

管理共享模式流的客户端通常使用 WASAPI 中的 ISimpleAudioVolumeIAudioSessionEvents 接口来控制和监视流卷级别。 通过 ISimpleAudioVolume 接口中的方法,客户端可以获取和设置共享模式流所属 的音频会话 的音量级别。 如果 Sndvol 或其他应用程序更改会话卷级别,客户端可以通过 IAudioSessionEvents 接口接收更改通知。

管理独占模式流的客户端通常使用 EndpointVolume API 中的 IAudioEndpointVolumeIAudioEndpointVolumeCallback 接口来控制和监视流卷级别。 通过 IAudioEndpointVolume 接口中的方法,客户端可以获取和设置 音频终结点设备的音量级别。 如果 Sndvol 或其他应用程序更改终结点设备的卷级别,客户端可以通过 IAudioEndpointVolumeCallback 接口接收更改通知。

音频会话中所述,Sndvol 是系统音量控制程序。 它显示系统中音频呈现终结点设备的音量控制。 (当前,它不显示音频捕获终结点设备的音量控件。) 若要查看特定设备的音量控件,请在菜单栏中单击 “设备 ”,然后从可用设备列表中选择设备名称。

Sndvol 窗口将设备的卷控件分为两个组。 窗口左侧的组框标记为 “设备”。 设备框包含由 IAudioEndpointVolume 接口控制的单个卷控件。 用户对此卷控件所做的更改可以通过 IAudioEndpointVolumeCallback 接口进行监视。

Sndvol 窗口右侧的组框标记为 “应用程序”。 “ 应用程序 ”框包含当前共享设备的应用程序的卷控件。 对于在共享模式下使用设备的应用程序,卷控件表示由 ISimpleAudioVolume 接口控制的卷级别。 用户对这些卷控件所做的更改可以通过 IAudioSessionEvents 接口进行监视。

尽管共享模式应用程序可以使用其 IAudioSessionEvents 接口监视用户对 Sndvol 窗口中 应用程序 卷控件所做的更改,但应用程序无法监视对其他无关应用程序的卷控件所做的更改。 同样,应用程序可以通过 ISimpleAudioVolume 接口更改其音频会话的音量级别,但无法更改属于其他无关应用程序的会话的音量级别。

但是,同一应用程序 (或实例的两个或多个相关应用程序) 可以通过将音频流分配给同一进程会话或将各自的会话与同一分组参数,在 Sndvol 窗口中 的应用程序 框中共享相同的音量控制。 有关详细信息,请参阅 音频会话分组参数

WASAPI 提供另外两个接口 (IChannelAudioVolumeIAudioStreamVolume)来控制共享模式流的卷级别。 这些接口主要由专用客户端使用,这些客户端需要控制会话中单个通道的卷级别或会话中的单个流。

DeviceTopology API 使客户端能够访问音频适配器拓扑中的音量控制。 但是,管理独占模式流的客户端通常使用 EndpointVolume API 而不是 DeviceTopology API 来控制流卷级别。 EndpointVolume API 通过两种方式简化了终结点设备的卷的控制。 首先,如果终结点设备实现硬件卷控制,DeviceTopology API 要求客户端在搜索硬件控件时遍历设备拓扑。 相比之下,EndpointVolume API 会自动查找客户端的硬件卷控件。 其次,如果终结点设备未实现硬件卷控制,DeviceTopology 客户端必须在软件中实现卷控制。 相比之下,EndpointVolume API 会自动将软件卷控件替换为缺少的硬件控件。

以下部分介绍音频会话和音频终结点设备的音量控制:

编程指南