如何使用USB音频设备的同步端点?

如何使用USB音频设备的同步端点?

我想在多个 USB 音频设备上同步播放相同的声音。我上次尝试这样的事情是在 2001 年左右,而且成功了——我当时使用的一对 Griffin iMics 仍然可以在那种情况下使用,但我现在想要更多频道。

我无法让其与较新的 USB 音频设备配合使用。我有一些设备带有 C-Media 芯片,这会产生很多噼啪声和爆音,并且与 iMics 不同步;另一个带有 TI 芯片的设备不会发出噼啪声,但仍然不同步。

根据我对 USB 音频工作原理的理解,同步问题与使用同步时钟的 iMics 和使用异步时钟的其他 iMics 一致。

现在,当我这样做时,lsusb -v我发现我的每个设备都公开了多个端点,一些是同步的,一些是异步的,一些是自适应的。所以我需要某种方法来指示音频驱动程序使用同步端点。这就是我陷入困境的地方。

  • 我如何知道哪些端点正在使用?lsof报告/dev/snd/pcmXXXXX正在使用中,但我不确定这是否对应于任何特定端点。我可以看到有关端点的信息,/sys/bus/usb但我不知道如何判断任何端点是否处于活动状态。
  • 如何通过配置 ALSA 或其他库来更改要使用的端点?我尝试查看 ALSA 源代码,但没有找到任何部分来说明如何选择要使用的端点。

答案1

USB 规范为等时端点定义了三种同步模式:同步、异步和自适应。

没有人使用同步。对于播放端点,自适应意味着设备以 PC 决定发送数据的速度运行;异步意味着设备告诉 PC 应该以多快的速度发送数据(这是通过另一个方向的第二个端点完成的)。

异步设备通常具有三个同步端点:一个用于播放样本的异步输出端点、一个用于播放频率反馈数据的输入端点和一个用于捕获样本的异步输入端点。它还可能具有用于混频器控制、MIDI 和特定于供应商的内容的中断和批量端点。

如果可能的话,USB 音频驱动程序会优先选择自适应端点而不是异步端点。(但我不知道目前有哪台设备对同一输出实际上有不同的端点类型;C-Media CM66xx 芯片肯定没有。)

因此,如果您想以相同的速度运行多个设备,则软件配置不能影响任何东西;您必须使用您知道支持自适应模式的设备。

相关内容