ALSA 设备(如“hw:0,0”)是什么意思?如何确定要使用哪个?

ALSA 设备(如“hw:0,0”)是什么意思?如何确定要使用哪个?

我搜索了好久,还是没找到“hw:0,0”是什么意思的解释。我该如何确定我的 USB 声卡的编号? 多普勒要求我输入如下内容:

audio_output {
        type                    "alsa"
        name                    "Sound Card"
        device                  "hw:0,0"     # optional
        format                  "44100:16:2" # optional
}

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

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

答案1

JohnT 的回答提供了很好的基础知识。我会继续介绍如何查找系统上的设备。使用aplay -l获取系统上的设备列表。硬件: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

由于这些 USB 设备每次插入时可能不总是获得相同的设备号,因此硬件:X,Y设备可能会发生变化。最简单的答案是,对于桌面系统,尝试 GNOME/KDE/Xfce 配置工具,看看它们是否足够智能,能够识别这些变化。

如果你不使用桌面系统,那么复杂的方法就会变得……有趣。你也许可以使用设备别名而不是硬件:X,Y——这就是输出显示的内容aplay -L某物:CARD=FOO,DEV=Ystuff 是别名,在不同的设备插件之间可能不会改变,其中X硬件: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

因此您的 aplay 命令将变成aplay -D front:CARD=CK804,DEV=0 somefile.wav,并且您可以在 .asoundrc 中使用相同的设备名称。


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

答案2

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

相关内容