Audio WASAPI音频设备的同步

Audio WASAPI音频设备的同步,audio,wasapi,Audio,Wasapi,WASAPI有没有办法确定两个设备(一个输入设备和一个输出设备)是否都同步到同一个底层时钟源 在我看到的所有示例中,输入和输出设备都是单独处理的——通常每个设备使用不同的线程或事件句柄,我没有看到任何关于如何保持两个设备同步(或如何处理设备不同步)的讨论 对于我的应用程序,我基本上需要进行从输入到输出的实时处理,每个音频周期我都会得到一定数量的输入样本,然后发送相同数量的输出样本。ie:我需要一个音频周期的触发事件,它对两个设备都是正确的,而不是每个设备的单独事件 我还需要了解它是如何在独占模式

WASAPI有没有办法确定两个设备(一个输入设备和一个输出设备)是否都同步到同一个底层时钟源

在我看到的所有示例中,输入和输出设备都是单独处理的——通常每个设备使用不同的线程或事件句柄,我没有看到任何关于如何保持两个设备同步(或如何处理设备不同步)的讨论

对于我的应用程序,我基本上需要进行从输入到输出的实时处理,每个音频周期我都会得到一定数量的输入样本,然后发送相同数量的输出样本。ie:我需要一个音频周期的触发事件,它对两个设备都是正确的,而不是每个设备的单独事件

我还需要了解它是如何在独占模式和共享模式下工作的。我想这将归结为寻找设备是否有一个共同的时钟源。对于共享模式,Windows保证设备同步的一些信息将非常有用。

您可以使用API检测给定音频客户端相对于QPC的漂移;如果两个端点共享一个时钟,它们相对于QPC的漂移将是相同的(也就是说,它们相对于彼此将具有零漂移)


您可以使用API来调整可以检测到的漂移。例如,您可以校正两侧相对于QPC的漂移;你可以修正任何一边相对于另一边的漂移;或者你可以将差异分成两半,然后将两边的值都修正为平均值。

谢谢Matthew。这是一个有趣的想法,但仅仅为了确定两个设备是否具有相同的时钟源,就必须做一件复杂的事情。ie:如果我试图构建一个UI,用相同的时钟源显示端点,那么启动和监控不同的设备组合似乎有点难。基本上,用WASAPI实现从输入到输出的实时流式传输似乎没有简单的方法,这很不幸(