我正在开发一个需要使用超过 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 驱动程序没有被分离(如果你能解释为什么它们从一个而不是另一个消失,这也会有帮助)。
有没有我可以运行的命令(可能来自终端,不一定来自 python)来从特定声卡分离/重新附加 ALSA 驱动程序?
非常感谢。