如何识别多个USB声卡
How can i identify multiple USB sound cards
我有一台 Linux 电脑,带有 USB 集线器和多个 USB 声卡。
这是我使用 aplay -l 命令可以看到的内容:
aplay -l
**** Liste des Périphériques Matériels PLAYBACK ****
carte 0: ALSA [bcm2835 ALSA], périphérique 0: bcm2835 ALSA [bcm2835 ALSA]
Sous-périphériques: 8/8
Sous-périphérique #0: subdevice #0
Sous-périphérique #1: subdevice #1
Sous-périphérique #2: subdevice #2
Sous-périphérique #3: subdevice #3
Sous-périphérique #4: subdevice #4
Sous-périphérique #5: subdevice #5
Sous-périphérique #6: subdevice #6
Sous-périphérique #7: subdevice #7
carte 0: ALSA [bcm2835 ALSA], périphérique 1: bcm2835 ALSA [bcm2835 IEC958/HDMI]
Sous-périphériques: 1/1
Sous-périphérique #0: subdevice #0
carte 1: Device [USB PnP Sound Device], périphérique 0: USB Audio [USB Audio]
Sous-périphériques: 1/1
Sous-périphérique #0: subdevice #0
carte 2: Device_1 [USB PnP Sound Device], périphérique 0: USB Audio [USB Audio]
Sous-périphériques: 1/1
Sous-périphérique #0: subdevice #0
carte 3: Device_2 [USB PnP Sound Device], périphérique 0: USB Audio [USB Audio]
Sous-périphériques: 1/1
Sous-périphérique #0: subdevice #0
carte 4: Device_3 [USB PnP Sound Device], périphérique 0: USB Audio [USB Audio]
Sous-périphériques: 1/1
Sous-périphérique #0: subdevice #0
所以,我有 5 个设备,它们用以下名称标识:ALSA、Device、Device_1、Device_2、Device_3
我的问题是:如何确定每次启动计算机时 Device_2 都匹配同一个 USB 声卡?
您认为计算机启动时匹配可能是随机的吗?
声卡内部没有唯一标识符,所以我想知道内核是如何匹配的。
谢谢
设备路径基本上定义了卡插入哪个 USB 端口。 运行 ls -la /sys/class/sound/
列出卡及其设备路径,然后将新名称写入卡的 id
属性。(使用 "device path" 重命名每张卡。)
例如:
$ ls -la /sys/class/sound/
total 0
drwxr-xr-x 2 root root 0 May 27 17:48 .
drwxr-xr-x 34 root root 0 May 27 17:48 ..
lrwxrwxrwx 1 root root 0 May 27 17:48 card1 -> ../../devices/pci0000:00/0000:00:1a.0/usb3/3-1/3-1:1.0/sound/card1
lrwxrwxrwx 1 root root 0 May 27 17:48 card2 -> ../../devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.0/sound/card2
lrwxrwxrwx 1 root root 0 May 27 17:48 card3 -> ../../devices/pci0000:00/0000:00:1a.1/usb4/4-1/4-1:1.0/sound/card3
lrwxrwxrwx 1 root root 0 May 27 17:48 card4 -> ../../devices/pci0000:00/0000:00:1a.1/usb4/4-2/4-2:1.0/sound/card4
...
给出4个设备路径。索引可能不同,但设备路径不会改变,直到您将卡插入不同的 USB 端口。
使用这些设备路径设置新名称:
echo -n NewName1 > /sys/devices/pci0000:00/0000:00:1a.0/usb3/3-1/3-1:1.0/sound/card*/id
echo -n NewName2 > /sys/devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.0/sound/card*/id
echo -n NewName3 > /sys/devices/pci0000:00/0000:00:1a.1/usb4/4-1/4-1:1.0/sound/card*/id
echo -n NewName4 > /sys/devices/pci0000:00/0000:00:1a.1/usb4/4-2/4-2:1.0/sound/card*/id
这也会更改 cat /proc/asound/cards
和 aplay -l
输出中的名称。
您可以定义规则以在检测到设备时自动设置这些名称。对于 udev 写入 /etc/udev/rules.d/70-my-sound-cards.rules
类似:
ACTION=="add", SUBSYSTEM=="sound", DEVPATH=="/devices/pci0000:00/0000:00:1a.0/usb3/3-1/3-1:1.0/sound/card?", ATTR{id}="NewName1"
ACTION=="add", SUBSYSTEM=="sound", DEVPATH=="/devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.0/sound/card?", ATTR{id}="NewName2"
ACTION=="add", SUBSYSTEM=="sound", DEVPATH=="/devices/pci0000:00/0000:00:1a.1/usb4/4-1/4-1:1.0/sound/card?", ATTR{id}="NewName3"
ACTION=="add", SUBSYSTEM=="sound", DEVPATH=="/devices/pci0000:00/0000:00:1a.1/usb4/4-2/4-2:1.0/sound/card?", ATTR{id}="NewName4"
(不要忘记在此处写上您的 卡名称和设备路径)
然后在您的软件中使用这些名称来引用卡片,例如,"plughw:NewName4"、"dmix:NewName2"...
我有一台 Linux 电脑,带有 USB 集线器和多个 USB 声卡。
这是我使用 aplay -l 命令可以看到的内容:
aplay -l
**** Liste des Périphériques Matériels PLAYBACK ****
carte 0: ALSA [bcm2835 ALSA], périphérique 0: bcm2835 ALSA [bcm2835 ALSA]
Sous-périphériques: 8/8
Sous-périphérique #0: subdevice #0
Sous-périphérique #1: subdevice #1
Sous-périphérique #2: subdevice #2
Sous-périphérique #3: subdevice #3
Sous-périphérique #4: subdevice #4
Sous-périphérique #5: subdevice #5
Sous-périphérique #6: subdevice #6
Sous-périphérique #7: subdevice #7
carte 0: ALSA [bcm2835 ALSA], périphérique 1: bcm2835 ALSA [bcm2835 IEC958/HDMI]
Sous-périphériques: 1/1
Sous-périphérique #0: subdevice #0
carte 1: Device [USB PnP Sound Device], périphérique 0: USB Audio [USB Audio]
Sous-périphériques: 1/1
Sous-périphérique #0: subdevice #0
carte 2: Device_1 [USB PnP Sound Device], périphérique 0: USB Audio [USB Audio]
Sous-périphériques: 1/1
Sous-périphérique #0: subdevice #0
carte 3: Device_2 [USB PnP Sound Device], périphérique 0: USB Audio [USB Audio]
Sous-périphériques: 1/1
Sous-périphérique #0: subdevice #0
carte 4: Device_3 [USB PnP Sound Device], périphérique 0: USB Audio [USB Audio]
Sous-périphériques: 1/1
Sous-périphérique #0: subdevice #0
所以,我有 5 个设备,它们用以下名称标识:ALSA、Device、Device_1、Device_2、Device_3
我的问题是:如何确定每次启动计算机时 Device_2 都匹配同一个 USB 声卡? 您认为计算机启动时匹配可能是随机的吗? 声卡内部没有唯一标识符,所以我想知道内核是如何匹配的。
谢谢
设备路径基本上定义了卡插入哪个 USB 端口。 运行 ls -la /sys/class/sound/
列出卡及其设备路径,然后将新名称写入卡的 id
属性。(使用 "device path" 重命名每张卡。)
例如:
$ ls -la /sys/class/sound/
total 0
drwxr-xr-x 2 root root 0 May 27 17:48 .
drwxr-xr-x 34 root root 0 May 27 17:48 ..
lrwxrwxrwx 1 root root 0 May 27 17:48 card1 -> ../../devices/pci0000:00/0000:00:1a.0/usb3/3-1/3-1:1.0/sound/card1
lrwxrwxrwx 1 root root 0 May 27 17:48 card2 -> ../../devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.0/sound/card2
lrwxrwxrwx 1 root root 0 May 27 17:48 card3 -> ../../devices/pci0000:00/0000:00:1a.1/usb4/4-1/4-1:1.0/sound/card3
lrwxrwxrwx 1 root root 0 May 27 17:48 card4 -> ../../devices/pci0000:00/0000:00:1a.1/usb4/4-2/4-2:1.0/sound/card4
...
给出4个设备路径。索引可能不同,但设备路径不会改变,直到您将卡插入不同的 USB 端口。
使用这些设备路径设置新名称:
echo -n NewName1 > /sys/devices/pci0000:00/0000:00:1a.0/usb3/3-1/3-1:1.0/sound/card*/id
echo -n NewName2 > /sys/devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.0/sound/card*/id
echo -n NewName3 > /sys/devices/pci0000:00/0000:00:1a.1/usb4/4-1/4-1:1.0/sound/card*/id
echo -n NewName4 > /sys/devices/pci0000:00/0000:00:1a.1/usb4/4-2/4-2:1.0/sound/card*/id
这也会更改 cat /proc/asound/cards
和 aplay -l
输出中的名称。
您可以定义规则以在检测到设备时自动设置这些名称。对于 udev 写入 /etc/udev/rules.d/70-my-sound-cards.rules
类似:
ACTION=="add", SUBSYSTEM=="sound", DEVPATH=="/devices/pci0000:00/0000:00:1a.0/usb3/3-1/3-1:1.0/sound/card?", ATTR{id}="NewName1"
ACTION=="add", SUBSYSTEM=="sound", DEVPATH=="/devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.0/sound/card?", ATTR{id}="NewName2"
ACTION=="add", SUBSYSTEM=="sound", DEVPATH=="/devices/pci0000:00/0000:00:1a.1/usb4/4-1/4-1:1.0/sound/card?", ATTR{id}="NewName3"
ACTION=="add", SUBSYSTEM=="sound", DEVPATH=="/devices/pci0000:00/0000:00:1a.1/usb4/4-2/4-2:1.0/sound/card?", ATTR{id}="NewName4"
(不要忘记在此处写上您的 卡名称和设备路径)
然后在您的软件中使用这些名称来引用卡片,例如,"plughw:NewName4"、"dmix:NewName2"...