像“hw:0,0”这样的 ALSA 设备是什么意思?我如何确定要使用哪个?

end*_*ith 83 audio linux alsa

我一遍又一遍地搜索,但找不到对“hw:0,0”含义的任何解释。如何确定我的 USB 声卡的编号? MPD要求我输入如下内容:

audio_output {
        type                    "alsa"
        name                    "Sound Card"
        device                  "hw:0,0"     # optional
        format                  "44100:16:2" # optional
}
Run Code Online (Sandbox Code Playgroud)

如果我执行“alsamixer -c 1”,它会打开 USB 卡的音量控制,但这对我没有帮助。

在哪里可以找到系统上的设备名称/编号列表?它们对硬件变化有弹性吗?如果我移除卡 2,卡 3 会变成卡 2 吗?还有其他方法可以识别设备吗?我在哪里可以找到有关这些的文档?

qua*_*ote 64

JohnT 的回答提供了一个很好的基础。我将跟进如何在您的系统上找到设备。使用aplay -l让您的系统上的设备的清单。在HW:X,Y来自硬件的这种映射-在这种情况下,X号码,而ÿ设备数量。

$ aplay -l   # note lower-case "L" option
**** List of PLAYBACK Hardware Devices ****
card 0: T71Space [Terratec Aureon 7.1-Space], device 0: ICE1724 [ICE1724]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: T71Space [Terratec Aureon 7.1-Space], device 1: IEC1724 IEC958 [IEC1724 IEC958]
  Subdevices: 0/1
  Subdevice #0: subdevice #0
card 0: T71Space [Terratec Aureon 7.1-Space], device 2: ICE1724 Surrounds [ICE1724 Surround PCM]
  Subdevices: 3/3
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
  Subdevice #2: subdevice #2
Run Code Online (Sandbox Code Playgroud)

由于这些 USB 设备在每次插入时可能并不总是获得相同的设备编号,因此hw:X,Y设备可能会发生变化。最简单的答案是,对于桌面系统,尝试使用 GNOME/KDE/Xfce 配置工具,看看它们是否足够聪明来接受更改。

复杂的方式,如果你不是用桌面系统来做这件事,会变得……有趣。您可能可以使用设备别名而不是hw:X,Y - 这就是aplay -L显示的输出。的东西:CARD = FOO,DEV = Y的东西是别名,并且可能不会不同的设备插件之间切换,其中XHW:X,Y威力。(假设您每次都使用相同的 USB 加密狗。)

$ aplay -L
default:CARD=CK804
    NVidia CK804, NVidia CK804
    Default Audio Device
front:CARD=CK804,DEV=0                 # hw:0,0
    NVidia CK804, NVidia CK804
    Front speakers
surround40:CARD=CK804,DEV=0            # hw:0,1
    NVidia CK804, NVidia CK804
    4.0 Surround output to Front and Rear speakers
Run Code Online (Sandbox Code Playgroud)

所以你的 aplay 命令会变成aplay -D front:CARD=CK804,DEV=0 somefile.wav,你可以在你的 .asoundrc 中使用相同的设备名。


如果您需要在更低级别的更稳定的东西,即实际的内核设备,udev就是您想要的——它是允许将设备热插拔到系统中的系统。您可以为 udev 编写规则(这里是手册页),允许设备在插入时获得相同的设备名称。

  • 啊哈!有人告诉我 `aplay -L`,它提供的输出与 `aplay -l` 不同。*叹* (3认同)
  • 你怎么知道`surround40:CARD=CK804,DEV=0`是`hw:0,1`?据我所知,它是“hw:0,0”,因为它引用“DEV=0”,但采用不同的配置(4 个通道,而不是“front:CARD=CK804,DEV=0”中的 2 个通道) )。 (2认同)

Joh*_*n T 21

hw:0,0在默认声卡上指定默认设备。要访问第二个声卡的第一个设备,您需要指定hw:1,0. 这些在您的.asoundrc. 更多关于这一切在这里

  • 具体在这里:http://www.alsa-project.org/main/index.php/Asoundrc#The_naming_of_PCM_devices (5认同)