web-dev-qa-db-ja.com

USBオーディオデバイスの同期エンドポイントを使用するにはどうすればよいですか?

複数のUSBオーディオデバイスで同じサウンドを同期して再生したい。前回このようなことを試したのは2001年頃で、成功しました。当時使用していたGriffin iMicsのペアは引き続きその使用法で機能しますが、今はもっと多くのチャネルが必要です。

最近のUSBオーディオデバイスでこれを機能させるのに問題があります。私はC-Mediaチップを搭載したデバイスをいくつか持っていますが、これは多くのパチパチ音やポップ音を発生させ、iMicsと比較して同期がずれています。 TIチップを搭載した別のデバイスはパチパチ音を立てませんが、それでも同期が外れます。

USBオーディオがどのように機能するかについての私の理解によれば、同期の問題は、同期クロックを使用するiMicsおよび非同期クロックを使用する他の問題と一致します。

ここで、lsusb -vを実行すると、各デバイスが複数のエンドポイント(同期、非同期、および適応)を公開していることがわかります。したがって、同期エンドポイントを使用するようにオーディオドライバーに指示する方法が必要です。それは私が立ち往生しているところです。

  • どのエンドポイントが使用されているかをどのように確認できますか? lsof/dev/snd/pcmXXXXXが使用中であると報告していますが、それが特定のエンドポイントに対応しているかどうかはわかりません。 /sys/bus/usbでエンドポイントに関する情報を確認できますが、アクティブなエンドポイントを確認する方法がわかりません。
  • ALSAまたはその他のライブラリを構成して、使用するエンドポイントを変更するにはどうすればよいですか? ALSAソースを調べてみましたが、使用するエンドポイントを選択する方法を示す部分が見つかりませんでした。
4
crowding

USB仕様では、アイソクロナスエンドポイントの3つの同期モード(同期、非同期、および適応)が定義されています。

誰も同期を使用しません。再生エンドポイントの場合、アダプティブとは、PCがデータの送信を決定した速度とまったく同じ速度でデバイスが実行されることを意味します。非同期とは、デバイスがPCにデータを送信する速度を指示することを意味します(これは、反対方向の2番目のエンドポイントを介して行われます)。

非同期デバイスには通常、3つのアイソクロナスエンドポイントがあります。1つは再生サンプル用の非同期出力エンドポイント、1つは再生周波数フィードバックデータ用の入力エンドポイント、もう1つはキャプチャサンプル用の非同期入力エンドポイントです。また、ミキサー制御、MIDI、およびベンダー固有のもののための割り込みおよびバルクエンドポイントがある場合があります。

USBオーディオドライバーは、可能であれば、非同期エンドポイントよりも適応エンドポイントを優先します。 (しかし、同じ出力に対して実際に異なるエンドポイントタイプを持っている現在のデバイスは知りません。C-MediaCM66xxチップは確かにそうではありません。)

したがって、複数のデバイスを同じ速度で実行する場合は、ソフトウェア構成に影響を与えることはできません。アダプティブモードをサポートしていることがわかっているデバイスを使用する必要があります。

4
CL.