IAudioEndpointVolume::GetVolumeRange 方法 (endpointvolume.h)

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

语法

HRESULT GetVolumeRange(
  [out] float *pflVolumeMindB,
  [out] float *pflVolumeMaxdB,
  [out] float *pflVolumeIncrementdB
);

参数

[out] pflVolumeMindB

指向最小音量级别的指针。 此参数指向一个 浮点 变量,方法在其中以分贝为单位写入最小音量级别。 此值在 IAudioEndpointVolume 接口实例的生存期内保持不变。

[out] pflVolumeMaxdB

指向最大卷级别的指针。 此参数指向一个 浮点 变量,方法在其中以分贝为单位写入最大音量级别。 此值在 IAudioEndpointVolume 接口实例的生存期内保持不变。

[out] pflVolumeIncrementdB

指向卷增量的指针。 此参数指向一个 浮点 变量,方法在其中以分贝为单位写入卷增量。 此增量在 IAudioEndpointVolume 接口实例的生存期内保持不变。

返回值

如果该方法成功,则它会返回 S_OK。 如果失败,可能的返回代码包括但不限于下表中显示的值。

返回代码 说明
E_POINTER
参数 pfLevelMinDBpfLevelMaxDBpfVolumeIncrementDBNULL

备注

从 vmin = *pfLevelMinDB 到 vmax = *pfLevelMaxDB 的卷范围划分为大小 vinc = *pfVolumeIncrementDBn 个统一间隔,其中

n = (vmax – vmin) / vinc。

vmin、vmax 和 vinc 的值以分贝为单位。 客户端可以将音量级别设置为从 vmin 到 vmax 范围内的 n + 1 个离散值之一。

IAudioEndpointVolume::SetChannelVolumeLevelIAudioEndpointVolume::SetMasterVolumeLevel 方法仅接受从 vmin 到 vmax 范围内的卷级别。 如果调用方指定超出此范围的卷级别,则 方法将失败并返回E_INVALIDARG。 如果调用方指定的卷级别介于卷范围内的两个步骤之间,则 方法会将终结点卷级别设置为最接近所请求卷级别的步骤,并返回S_OK。 但是,对 IAudioEndpointVolume::GetChannelVolumeLevelIAudioEndpointVolume::GetMasterVolumeLevel 的后续调用将检索上一次调用 SetChannelVolumeLevelSetMasterVolumeLevel 请求的卷级别,而不是步骤值。

如果在硬件中实现卷控制, GetVolumeRange 将描述硬件卷设置的范围和粒度。 相比之下, IEndpointVolume::GetVolumeStepInfo 方法报告的步骤对应于音频锥形曲线上的点,这些曲线由 IEndpointVolume::VolumeStepDown 和IEndpointVolume::VolumeStepUp 方法在软件中计算。 两种方法都首先计算与曲线上下一点相对应的理想化体积级别。 接下来,方法选择最接近理想化级别的硬件卷设置。 有关音频锥形曲线的详细信息,请参阅 音频锥形音量控制

要求

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

另请参阅

IAudioEndpointVolume 接口

IAudioEndpointVolume::GetChannelVolumeLevel

IAudioEndpointVolume::GetMasterVolumeLevel

IAudioEndpointVolume::SetChannelVolumeLevel

IAudioEndpointVolume::SetMasterVolumeLevel

IEndpointVolume::GetVolumeStepInfo

IEndpointVolume::VolumeStepDown

IEndpointVolume::VolumeStepUp