1

32 を超える USB サウンド カードを使用する必要があるアプリケーションに取り組んでいます。Pythonで書かれており、Ubuntu 12.04でテストしています。私が使用している便利なモジュールには、pyusb と pyalsaaudio があります。

私の問題は、ALSA ドライバーが最大で 32 個のサウンド デバイスを処理できることです。そのため、アプリケーションはそれらすべてに同時に出力する必要がないため (帯域幅の制限により、出力することもできませんでした)、切り離すことを考えていました。 USB カードから ALSA ドライバーを取得し、必要に応じて接続します (ある種のキューを使用)。

現在、すべての USB デバイスを認識でき (システムがそれらを処理できるようにする 3.6 カーネルをインストールした後)、pyusb でそれらの表現を取得できます。私が試した(3枚のカードでのテスト用):

>>> import usb.core
>>> import usb.util
>>> cards = []
>>> cards.append(usb.core.find(idVendor=0x0d8c))
>>> cards.append(usb.core.find(idVendor=0x0c76))
>>> cards.append(usb.core.find(idVendor=0x1130))
>>> len(cards)
3
>>> for c in cards:
...     c.detach_kernel_driver(0)
... 

の出力からカードを正常に削除しますaplay -L。ただし、それらは の出力にまだ表示されるcat /proc/asound/cardsため、ALSA ドライバーが分離されていないのではないかと思います (一方から消えて他方から消えない理由を説明できれば、それも役に立ちます)。

特定のサウンド カードから ALSA ドライバーをデタッチ/再アタッチするために (必ずしも python からではなく、ターミナルから) 実行できるコマンドはありますか?

どうもありがとう。

4

0 に答える 0