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 からではなく、ターミナルから) 実行できるコマンドはありますか?
どうもありがとう。