IAudioClock2::GetDevicePosition 方法 (audioclient.h)

GetDevicePosition 方法直接从硬件获取当前设备位置(以帧为单位)。

语法

HRESULT GetDevicePosition(
  [out] UINT64 *DevicePosition,
  [out] UINT64 *QPCPosition
);

参数

[out] DevicePosition

接收设备位置(以帧为单位)。 接收的位置是方法直接从硬件获取的未处理值。 有关详细信息,请参阅“备注”。

[out] QPCPosition

在音频终结点设备读取在 DevicePosition 参数中检索到的设备位置以响应 GetDevicePosition 调用时接收性能计数器的值。
GetDevicePosition 将计数器值转换为 100 纳秒的时间单位,然后再将其写入 QPCPosition。 如果客户端不需要性能计数器值,则 QPCPosition 可以为 NULL。 有关详细信息,请参阅“备注”。

返回值

如果该方法成功,则它会返回 S_OK。

返回代码 说明
E_POINTER
参数 DevicePositionNULL
AUDCLNT_E_DEVICE_INVALIDATED
音频终结点已断开连接。
AUDCLNT_S_POSITION_STALLED
尚未为此流调用 IAudioClient::Start 方法。

注解

此方法仅适用于共享模式流。

此方法检索两个相关的流位置值:

  • 设备位置。 客户端在 DevicePosition 中检索未处理的设备位置。 这是当前通过扬声器播放的示例的流位置, (呈现流) 或通过麦克风 (录制捕获流) 。 设备终结点的采样率可能与客户端使用的混合格式的采样率不同。 若要从客户端检索设备位置,请调用 IAudioClock::GetPosition
  • 性能计数器。 客户端在 QPCPosition 中检索性能计数器。 当音频终结点设备将流位置存储在 GetDevicePosition 方法的 DevicePosition 参数中时,GetDevicePosition 通过调用 QueryPerformanceCounter 函数来获取计数器值。 GetDevicePosition 将计数器值转换为 100 纳秒的时间单位。 有关 QueryPerformanceCounterQueryPerformanceFrequency 的详细信息,请参阅Windows SDK文档。
给定 GetDevicePosition 调用时的设备位置和性能计数器,客户端可以通过调用 QueryPerformanceCounter 获取当前性能计数器,并根据计数器自记录原始设备位置以来的前进距离推断设备位置,从而在以后更及时地估计设备位置。 客户端可以调用 QueryPerformanceCounter 函数来获取递增计数器的时钟频率。 将从 QueryPerformanceCounter 获取的原始计数器值与 GetDevicePosition 检索的值进行比较之前,请将原始计数器值转换为 100 纳秒的时间单位,如下所示:
  1. 将原始计数器值乘以 10,000,000。
  2. 将结果除以从 QueryPerformanceFrequency 获取的计数器频率。

要求

要求
最低受支持的客户端 Windows 7 [仅限桌面应用]
最低受支持的服务器 Windows Server 2008 R2 [仅限桌面应用]
目标平台 Windows
标头 audioclient.h

另请参阅

IAudioClock2