音量控件

管理共享模式流的客户端通常使用 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 会自动用软件音量控件替换缺少的硬件控件。

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

编程指南