Windows WASAPI独占模式不规则回调

Windows WASAPI独占模式不规则回调,windows,audio,wasapi,Windows,Audio,Wasapi,我们已经注意到,在独占、事件驱动模式下使用WASAPI会导致不规则的回调周期。在不显示每个人都用作基线的“相同的旧”代码(Microsoft示例)的情况下,我们完成了以下工作(为简单起见,采用了硬编码): 请注意,所有设备报告的最小设备周期为30000,因此我们可以使用此代码。混合格式只是一个标准的16位双通道PCM设置,没有什么特别之处 这工作正常,我们的回调运行正常,音频处理正常 然而,我们在真正获得4ms延迟方面遇到了困难。因此,我们在渲染回调中添加了一些计时代码,并注意到回调的平均时间实

我们已经注意到,在独占、事件驱动模式下使用WASAPI会导致不规则的回调周期。在不显示每个人都用作基线的“相同的旧”代码(Microsoft示例)的情况下,我们完成了以下工作(为简单起见,采用了硬编码):

请注意,所有设备报告的最小设备周期为30000,因此我们可以使用此代码。混合格式只是一个标准的16位双通道PCM设置,没有什么特别之处

这工作正常,我们的回调运行正常,音频处理正常

然而,我们在真正获得4ms延迟方面遇到了困难。因此,我们在渲染回调中添加了一些计时代码,并注意到回调的平均时间实际上是4ms,但单个回调时间如下所示(时间略有不同,但这是典型的):

9.867毫秒 .089ms 9.929ms .088ms .090ms 9.803ms .093ms 9.909ms .063ms .069ms . .

我们本以为每次通话间隔约为4ms。问题是,如果我们试图尽可能快地提供音频而不丢失,我们就无法保持4ms的速率。实际上,我们不能指望发送音频的速度超过10毫秒左右,因为触发我们的回调似乎有时需要近10毫秒

使用AvmSetThreadCharacteristics或MFLockSharedWorkQueue将所有线程设置为“Pro Audio”

我们已经使用IAudioClient和IAudioClient 3以及来自多个制造商的多个设备(但都是USB设备)完成了这项工作

这是与驱动程序相关的问题吗?我们使用的设备有Realtek USB、Motu M2、Focusrite 18i8、RME Babyface Pro FS等。他们都表现出这种行为

m_AudioClient->Initialize(AUDCLNT_SHAREMODE_EXCLUSIVE,
                          AUDCLNT_STREAMFLAGS_EVENTCALLBACK,
                          40000,
                          40000,
                          m_MixFormat,
                          nullptr);