我正在开发一个需要使用超过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驱动程序?
非常感谢。