IAudioEndpointVolume 接口 (endpointvolume.h)
IAudioEndpointVolume 接口表示音频流与音频终结点设备的音量控制。 客户端通过调用 IMMDevice::Activate 方法获取对终结点设备的 IAudioEndpointVolume 接口的引用,并将参数 iid 设置为 REFIID IID_IAudioEndpointVolume。
使用 MMDevice API 和 WASAPI 的音频应用程序通常使用 ISimpleAudioVolume 接口按会话管理流音量级别。 在极少数情况下,专用音频应用程序可能需要使用 IAudioEndpointVolume 接口来控制音频终结点设备的主音量级别。 IAudioEndpointVolume 的客户端必须小心避免更改音频终结点设备主音量对其他音频应用程序的潜在破坏性影响。 通常,用户可以通过 Windows 音量控制程序以独占方式控制主卷级别,Sndvol.exe。
如果向/从终结点设备流式传输音频数据的适配器设备具有硬件音量和静音控件, 则 IAudioEndpointVolume 接口使用这些控件来管理音频流的音量和静音设置。 如果音频设备缺少流的硬件音量控制,音频引擎会自动在软件中实现音量和静音控制。
对于管理与终结点设备的共享模式流的应用程序, IAudioEndpointVolume 的行为对于呈现流和捕获流是不同的。
对于共享模式呈现流,客户端通过 IAudioEndpointVolume 接口访问的终结点卷控制独立于 ISimpleAudioVolume 接口和 IChannelAudioVolume 接口实现的每个会话卷控件运行。 因此,呈现流的音量级别由终结点卷控件和每会话控件的组合效果产生。
对于共享模式捕获流, ISimpleAudioVolume 和 IChannelAudioVolume 接口实现的每个会话卷控件直接绑定到 由 IAudioEndpointVolume 接口实现的终结点卷控制。 通过 ISimpleAudioVolume 和 IChannelAudioVolume 接口中的方法更改每个会话的音量控件会更改 IAudioEndpointVolume 接口的音量控制设置,反之亦然。 每个接口表示的音量级别彼此对应,如下所示:
- 对于流中的每个通道, IAudioEndpointVolume 提供以分贝 (dB) 表示的 音频锥 化音量级别,这些音量映射到从 0.0 (最小音量) 到 1.0 (最大音量) 范围内的规范化值。 可能的范围取决于音频驱动程序。 有关详细信息,请参阅 IAudioEndpointVolume::GetVolumeRange 。
- ISimpleAudioVolume::GetMasterVolume 表示的会话卷是介于 0.0 到 1.0 之间的标量值,对应于各个通道中的最高音量设置。 例如,如果左侧通道设置为 0.8,右侧通道设置为 0.4,则 ISimpleAudioVolume::GetMasterVolume 将返回 0.8。
- 当通过 IChannelAudioVolume 接口中的方法控制每通道音量级别时,指示音量的标量始终相对于会话卷。 这意味着音量最高的一个或多个通道的音量为 1.0。 假设两个通道的示例,将 IAudioEndpointVolume::SetChannelVolumeLevelScalar 设置为 0.8 和 0.4 卷, IChannelAudioVolume::GetChannelVolume 将指示卷为 1.0 和 0.5。
如果设备具有硬件音量和静音控件,则通过 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 |