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。 如果失败,可能的返回代码包括但不限于下表中显示的值。
返回代码 | 说明 |
---|---|
|
参数 pfLevelMinDB、 pfLevelMaxDB 或 pfVolumeIncrementDB 为 NULL。 |
备注
从 vmin = *pfLevelMinDB 到 vmax = *pfLevelMaxDB 的卷范围划分为大小 vinc = *pfVolumeIncrementDB 的 n 个统一间隔,其中
n = (vmax – vmin) / vinc。
vmin、vmax 和 vinc 的值以分贝为单位。 客户端可以将音量级别设置为从 vmin 到 vmax 范围内的 n + 1 个离散值之一。
IAudioEndpointVolume::SetChannelVolumeLevel 和 IAudioEndpointVolume::SetMasterVolumeLevel 方法仅接受从 vmin 到 vmax 范围内的卷级别。 如果调用方指定超出此范围的卷级别,则 方法将失败并返回E_INVALIDARG。 如果调用方指定的卷级别介于卷范围内的两个步骤之间,则 方法会将终结点卷级别设置为最接近所请求卷级别的步骤,并返回S_OK。 但是,对 IAudioEndpointVolume::GetChannelVolumeLevel 或 IAudioEndpointVolume::GetMasterVolumeLevel 的后续调用将检索上一次调用 SetChannelVolumeLevel 或 SetMasterVolumeLevel 请求的卷级别,而不是步骤值。
如果在硬件中实现卷控制, GetVolumeRange 将描述硬件卷设置的范围和粒度。 相比之下, IEndpointVolume::GetVolumeStepInfo 方法报告的步骤对应于音频锥形曲线上的点,这些曲线由 IEndpointVolume::VolumeStepDown 和IEndpointVolume::VolumeStepUp 方法在软件中计算。 两种方法都首先计算与曲线上下一点相对应的理想化体积级别。 接下来,方法选择最接近理想化级别的硬件卷设置。 有关音频锥形曲线的详细信息,请参阅 音频锥形音量控制。
要求
最低受支持的客户端 | Windows Vista [桌面应用 | UWP 应用] |
最低受支持的服务器 | Windows Server 2008 [桌面应用 | UWP 应用] |
目标平台 | Windows |
标头 | endpointvolume.h |
另请参阅
IAudioEndpointVolume::GetChannelVolumeLevel
IAudioEndpointVolume::GetMasterVolumeLevel
IAudioEndpointVolume::SetChannelVolumeLevel
IAudioEndpointVolume::SetMasterVolumeLevel
IEndpointVolume::GetVolumeStepInfo