EndpointVolume API
EndpointVolume API 使专用客户端能够控制和监视 音频终结点设备的音量级别。 客户端通过获取音频终结点设备的 IMMDevice 接口并调用 IMMDevice::Activate 方法来获取对 EndpointVolume API 中的接口的引用。
头文件 Endpointvolume.h 定义 EndpointVolume API 中的接口。
使用 MMDevice API 和 WASAPI 的音频应用程序通常使用 ISimpleAudioVolume 接口来控制每个会话的音量级别。 只有两种类型的音频应用程序需要使用 EndpointVolume API。 这些应用程序类型包括:
- 管理音频终结点设备的主音量级别的应用程序(类似于 Windows 音量控制程序)Sndvol.exe。
- 需要对音频终结点设备进行独占模式访问的专业音频(“pro audio”)应用程序。
不适当的 EndpointVolume API 使用可能会干扰 Windows 音频策略并中断用户的系统音量设置。
如果音频终结点设备实现硬件音量和静音控制,EndpointVolume API 会使用这些控件来管理设备音量。 否则,EndpointVolume API 以透明方式在软件中实现控件,以透明方式实现客户端。
如果设备具有硬件卷和静音控制,则通过 EndpointVolume API 对设备的卷和静音设置所做的更改会影响共享模式和独占模式下的卷级别。 如果设备缺少硬件卷和静音控件,则通过 EndpointVolume API 对软件卷和静音控件所做的更改会影响共享模式下的卷级别,但不影响独占模式。 在独占模式下,客户端和设备直接交换音频数据,绕过软件控制。
对于必须管理硬件卷和静音控制的应用程序,EndpointVolume API 在 DeviceTopology API中提供了两个潜在优势。
首先,许多音频适配器设备缺少硬件音量控制。 如果设备缺少硬件卷控制,EndpointVolume API 中的 IAudioEndpointVolume 接口会自动在该设备上或流中实现软件卷控制。 对于 EndpointVolume API 的客户端,无论卷控制是由设备还是在软件中由 EndpointVolume API 接口在硬件中实现的,结果都是相同的。
其次,即使适配器设备确实实现了硬件卷控制,使用 DeviceTopology API 实现拓扑遍历算法的应用程序也可能无法找到要查找的控件。 通常,此类应用程序旨在遍历特定设备或一组相关设备的硬件拓扑。 如果应用程序尝试遍历其未专门设计或测试的设备拓扑,则应用程序可能会失败。
只有必须访问除卷和静音控制以外的硬件功能的专用应用程序需要使用 DeviceTopology API。 对于仅需要控制独占模式流的音量级别的应用程序,EndpointVolume API 更易于使用,并且能够可靠地与更广泛的音频硬件设备一起使用。
有关在 EndpointVolume API 中使用接口的代码示例,请参阅以下主题:
若要查看使用 EndpointVolume API 的示例,请参阅 Windows SDK 中的 EndpointVolume。
EndpointVolume API 实现以下接口。
接口 | 描述 |
---|---|
IAudioEndpointVolume | 表示音频流对音频终结点设备或从音频终结点设备进行音量控制。 |
IAudioMeterInformation | 表示音频流到音频终结点设备或从音频终结点设备到或传出音频流的峰值计量。 |
此外,需要通知音频终结点设备中的音量和静音更改的 EndpointVolume API 客户端应实现以下接口。
接口 | 描述 |
---|---|
IAudioEndpointVolumeCallback | 当音频终结点设备的音量级别或静音状态更改时,提供通知。 |
相关主题