IAudioClient::GetDevicePeriod 方法 (audioclient.h)

GetDevicePeriod 方法检索音频引擎对终结点缓冲区中数据的连续处理传递分隔的定期间隔的长度。

语法

HRESULT GetDevicePeriod(
  [out] REFERENCE_TIME *phnsDefaultDevicePeriod,
  [out] REFERENCE_TIME *phnsMinimumDevicePeriod
);

参数

[out] phnsDefaultDevicePeriod

指向 REFERENCE_TIME 变量的指针,方法在其中写入时间值,指定音频引擎定期处理传递之间的默认间隔。 时间以 100 纳秒为单位表示。 有关 REFERENCE_TIME的信息,请参阅 Windows SDK 文档。

[out] phnsMinimumDevicePeriod

指向 REFERENCE_TIME 变量的指针,方法在其中写入一个时间值,指定音频终结点设备定期处理通过之间的最小间隔。 时间以 100 纳秒为单位表示。

返回值

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

返回代码 说明
AUDCLNT_E_DEVICE_INVALIDATED
音频终结点设备已拔出,或者音频硬件或关联的硬件资源已重新配置、禁用、删除或以其他方式不可用。
AUDCLNT_E_SERVICE_NOT_RUNNING
Windows 音频服务未运行。
E_POINTER
参数 phnsDefaultDevicePeriodphnsMinimumDevicePeriod 均为 NULL

注解

客户端可以在调用 IAudioClient::Initialize 方法之前调用此方法。

phnsDefaultDevicePeriod 参数指定共享模式流的默认计划周期。 phnsMinimumDevicePeriod 参数指定独占模式流的最小计划周期。

两个参数( phnsDefaultDevicePeriodphnsMinimumDevicePeriod)中至少有一个必须为非 NULL ,否则该方法将立即返回错误代码E_POINTER。 如果两个参数均为非 NULL,则 方法将输出默认周期和最小周期。

对于共享模式流,音频引擎会定期处理终结点缓冲区中的数据,引擎与客户端应用程序共享这些数据。 引擎计划自身定期执行这些处理传递。

音频引擎处理传递之间的时间段对于特定音频终结点设备是固定的,表示音频引擎的最小处理量子。 此时间段加上缓冲区和终结点设备之间的流延迟表示音频应用程序可以实现的最小可能延迟。

客户端可以选择计划其定期处理线程以与音频引擎相同的时间间隔运行。 这样,客户端就可以为共享模式流实现尽可能小的延迟。 但是,在延迟不太重要的应用程序中,客户端可以通过计划其处理过程来降低 CPU 上的进程切换开销。 在这种情况下,终结点缓冲区必须按比例增大,以补偿处理传递之间的较长时间。

客户端在调用 IAudioClient::Initialize 方法期间确定缓冲区大小。 对于共享模式流,如果客户端向此方法传递 了 hnsBufferDuration 参数值 0,则该方法假定客户端和音频引擎的时间段保证相等,并且该方法将分配足够小的缓冲区以实现尽可能低的延迟。 (事实上,0 与音频引擎的周期和设备延迟之和之间的任何 hnsBufferDuration 值都将具有相同的结果。) 同样,对于独占模式流,如果客户端将 hnsBufferDuration 设置为 0,则 该方法假定客户端的时间段设置为音频终结点设备的最小时间段, 和 方法将分配足够小的缓冲区,以实现尽可能小的延迟。

如果客户端选择较少运行其定期处理线程,但代价是延迟增加,则只要在 IAudioClient::Initialize 调用期间创建足够大的终结点缓冲区,它就可以这样做。

要求

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

另请参阅

IAudioClient 接口

IAudioClient::Initialize