【问题标题】:How can i identify multiple USB sound cards [closed]如何识别多个 USB 声卡 [关闭]
【发布时间】:2017-09-07 18:23:54
【问题描述】:

我有一台带有 USB 集线器和多个 USB 声卡的 Linux 计算机。

这是我可以使用 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 声卡匹配? 您认为计算机启动时匹配可能是随机的吗? 声卡内部没有唯一标识符,所以我想知道内核是如何进行匹配的。

谢谢

【问题讨论】:

  • 请参阅alsa.opensrc.org/Udev 上的“识别两个相同的音频设备”。
  • 如果我理解这是映射源的 USB 端口标识符?
  • 该页面讨论了如何“更改他们的 ID,具体取决于设备连接的端口。”
  • 如果我不对这个配置文件做任何改动,我将永远拥有相同的映射?谢谢
  • 否;卡号是随机的,具体取决于哪个设备先接听。

标签: linux-device-driver alsa


【解决方案1】:

设备路径基本上定义了卡插入的 USB 端口。运行ls -la /sys/class/sound/列出卡及其设备路径,然后将新名称写入卡的id属性。(使用“设备路径”重命名每张卡。)

例如:

$ 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/cardsaplay -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”...

【讨论】:

  • 你救了我的命!非常感谢! :)
  • 我必须说,你也救了我的命!!! :D
猜你喜欢
  • 2022-08-23
  • 2013-06-16
  • 1970-01-01
  • 1970-01-01
  • 2015-03-07
  • 2011-06-15
  • 2010-12-25
  • 2014-07-08
  • 1970-01-01
相关资源
最近更新 更多