IAudioEndpointVolume 接口 (endpointvolume.h)

IAudioEndpointVolume 接口表示音频流与音频终结点设备的音量控制。 客户端通过调用 IMMDevice::Activate 方法获取对终结点设备的 IAudioEndpointVolume 接口的引用,并将参数 iid 设置为 REFIID IID_IAudioEndpointVolume。

使用 MMDevice APIWASAPI 的音频应用程序通常使用 ISimpleAudioVolume 接口按会话管理流音量级别。 在极少数情况下,专用音频应用程序可能需要使用 IAudioEndpointVolume 接口来控制音频终结点设备的主音量级别。 IAudioEndpointVolume 的客户端必须小心避免更改音频终结点设备主音量对其他音频应用程序的潜在破坏性影响。 通常,用户可以通过 Windows 音量控制程序以独占方式控制主卷级别,Sndvol.exe。

如果向/从终结点设备流式传输音频数据的适配器设备具有硬件音量和静音控件, 则 IAudioEndpointVolume 接口使用这些控件来管理音频流的音量和静音设置。 如果音频设备缺少流的硬件音量控制,音频引擎会自动在软件中实现音量和静音控制。

对于管理与终结点设备的共享模式流的应用程序, IAudioEndpointVolume 的行为对于呈现流和捕获流是不同的。

对于共享模式呈现流,客户端通过 IAudioEndpointVolume 接口访问的终结点卷控制独立于 ISimpleAudioVolume 接口和 IChannelAudioVolume 接口实现的每个会话卷控件运行。 因此,呈现流的音量级别由终结点卷控件和每会话控件的组合效果产生。

对于共享模式捕获流, ISimpleAudioVolumeIChannelAudioVolume 接口实现的每个会话卷控件直接绑定到 由 IAudioEndpointVolume 接口实现的终结点卷控制。 通过 ISimpleAudioVolumeIChannelAudioVolume 接口中的方法更改每个会话的音量控件会更改 IAudioEndpointVolume 接口的音量控制设置,反之亦然。 每个接口表示的音量级别彼此对应,如下所示:

注意EndpointVolume API 的客户端不应依赖于上述行为,因为它可能会在将来的版本中更改。
 

如果设备具有硬件音量和静音控件,则通过 IAudioEndpointVolume 接口对设备的音量和静音设置所做的更改会影响共享模式和独占模式下的音量级别。 如果设备缺少硬件音量和静音控件,则通过 IAudioEndpointVolume 接口对软件卷和静音控件所做的更改会影响共享模式下的音量级别,但在独占模式下不会影响音量级别。 在独占模式下,客户端和设备直接交换音频数据,绕过软件控件。 但是,软件控件是永久性的,当设备切换到共享模式操作时,当设备在独占模式下运行时所做的卷更改将生效。

若要确定设备是否具有硬件卷和静音控件,请调用 IAudioEndpointVolume::QueryHardwareSupport 方法。

IAudioEndpointVolume 接口的方法使客户端能够以分贝或标准化的音频带值表示音量级别。 在后一种情况下,音量级别表示为规范化范围内的浮点值,从 0.0 (最小音量) 到 1.0 (最大音量) 。 在此范围内,标准化音量级别与信号振幅衰减的关系由非线性音频带曲线描述。 有关音频带曲线的详细信息,请参阅 音频带带音量控制

此外,为了方便地支持用户界面中的音量滑块, IAudioEndpointVolume 接口使客户端能够设置和获取以离散值或“步骤”表示的音量级别。 这些步骤均匀分布在非线性音频锥形曲线上。 如果范围包含 n 个步骤,则步骤从 0 到 n – 1 进行编号,其中步骤 0 表示最小音量级别,步骤 n – 1 表示最大值。

有关使用 IAudioEndpointVolume 接口的 代码示例,请参阅 终结点卷控制

继承

IAudioEndpointVolume 接口继承自 IUnknown 接口。 IAudioEndpointVolume 还具有以下类型的成员:

方法

IAudioEndpointVolume 接口包含以下方法。

 
IAudioEndpointVolume::GetChannelCount

GetChannelCount 方法获取音频流中进入或离开音频终结点设备的通道计数。
IAudioEndpointVolume::GetChannelVolumeLevel

GetChannelVolumeLevel 方法获取进入或离开音频终结点设备的音频流中指定声道的音量级别(以分贝为单位)。
IAudioEndpointVolume::GetChannelVolumeLevelScalar

GetChannelVolumeLevelScalar 方法获取进入或离开音频终结点设备的指定音频流的指定声道的规范化音频带音量级别。
IAudioEndpointVolume::GetMasterVolumeLevel

GetMasterVolumeLevel 方法获取进入或离开音频终结点设备的音频流的主音量级别(以分贝为单位)。
IAudioEndpointVolume::GetMasterVolumeLevelScalar

GetMasterVolumeLevelScalar 方法获取进入或离开音频终结点设备的音频流的主音量级别。 音量级别表示为 0.0 到 1.0 范围内的规范化音频磁带值。
IAudioEndpointVolume::GetMute

GetMute 方法获取进入或离开音频终结点设备的音频流的静音状态。
IAudioEndpointVolume::GetVolumeRange

GetVolumeRange 方法获取进入或离开音频终结点设备的音频流的音量范围(以分贝为单位)。
IAudioEndpointVolume::GetVolumeStepInfo

GetVolumeStepInfo 方法获取有关卷范围内当前步长的信息。
IAudioEndpointVolume::QueryHardwareSupport

QueryHardwareSupport 方法查询音频终结点设备的硬件支持的功能。 (IAudioEndpointVolume.QueryHardwareSupport)
IAudioEndpointVolume::RegisterControlChangeNotify

RegisterControlChangeNotify 方法注册客户端的通知回调接口。
IAudioEndpointVolume::SetChannelVolumeLevel

SetChannelVolumeLevel 方法设置进入或离开音频终结点设备的音频流的指定声道的音量级别(以分贝为单位)。
IAudioEndpointVolume::SetChannelVolumeLevelScalar

SetChannelVolumeLevelScalar 方法设置进入或离开音频终结点设备的音频流中指定通道的规范化音频带音量。
IAudioEndpointVolume::SetMasterVolumeLevel

SetMasterVolumeLevel 方法设置进入或离开音频终结点设备的音频流的主音量级别(以分贝为单位)。
IAudioEndpointVolume::SetMasterVolumeLevelScalar

SetMasterVolumeLevelScalar 方法设置进入或离开音频终结点设备的音频流的主音量级别。 音量级别表示为 0.0 到 1.0 范围内的规范化音频磁带值。
IAudioEndpointVolume::SetMute

SetMute 方法设置进入或离开音频终结点设备的音频流的静音状态。
IAudioEndpointVolume::UnregisterControlChangeNotify

UnregisterControlChangeNotify 方法删除客户端在上一次调用 IAudioEndpointVolume::RegisterControlChangeNotify 方法中注册的客户端通知回调接口的注册。
IAudioEndpointVolume::VolumeStepDown

VolumeStepDown 方法将进入或离开音频终结点设备的音频流的音量级别递减一步。
IAudioEndpointVolume::VolumeStepUp

VolumeStepUp 方法将进入或离开音频终结点设备的音频流的音量级别递增一步。

要求

   
最低受支持的客户端 Windows Vista [桌面应用 | UWP 应用]
最低受支持的服务器 Windows Server 2008 [桌面应用 | UWP 应用]
目标平台 Windows
标头 endpointvolume.h

请参阅

核心音频接口

EndpointVolume API

IMMDevice::Activate

ISimpleAudioVolume 接口