在 ALSA(Advanced Linux Sound Architecture)中,card 和 device 是音频硬件的两个核心概念,用于标识系统中的声卡及其内部的子设备。
- card(声卡)
card 表示一块声卡的逻辑实体,可以是物理声卡,也可以是虚拟声卡(如 Loopback)。
每块声卡都有一个 card number(卡号),通常从 0 开始。
一块 card 下面可以有多个独立的音频接口。
你可以通过命令查看系统中的 card:
cat/proc/asound/cards示例输出可能是:
0[PCH]: HDA-Intel - HDA Intel PCH1[Loopback]: Loopback - Loopbackdevice(设备)
device 是 card 下的子设备,代表具体的音频通道或接口,例如播放设备(PCM playback)或录音设备(PCM capture)。
每个 device 也有自己的编号,从 0 开始。
一块声卡下可能存在多个设备,例如:
device 0:主 PCM 设备
device 1:次要 PCM 设备
device 2:MIDI 接口等
查看设备:
cat/proc/asound/devicescard 与 device 的组合使用
在 ALSA 的配置或程序(如 aplay, arecord)中,可以用 hw:card,device 指定音频接口。
示例:
使用 card0的 device0播放: aplay -D hw:0,0 test.wav 使用 card1的 device0录音: arecord -D hw:1,0 -fcdtest.wav使用 aplay(查看播放设备列表)
运行:
aplay -l你会看到类似:
card2: Device[USB Audio], device0: USB Audio[USB Audio]这里的地址就是 hw:2,0。
. 使用 arecord(查看录音设备列表)
arecord -l显示录音相关的设备,同样以 card X, device Y 的格式呈现。
使用 aplay -L 查看所有 ALSA 插件地址(包括 hw、plughw、dmix 等)
复制
aplay -L
会列出比如:
hw:C2D0 plughw:2,0 dmix:CARD=2,DEV=0查看系统真实设备文件(底层信息)
cat/proc/asound/cardscat/proc/asound/devices使用 amixer 查看设备的控制接口
amixer -c2查询指定声卡(例如 card2)的信息。
一、 ALSA 插件
ALSA 插件就是 ALSA 的软件层接口,用于在设备与应用之间完成各种功能,我们可以把插件理解成滤波器(filter)。比如:
格式转换(采样率、位深、通道数)
重采样
将多个程序的声音混到一起
将音频路由到指定设备
抽象出虚拟声卡
节省应用程序的复杂度
插件是通过 .asoundrc 或 /etc/asound.conf 中的配置实现的。
二、常见 ALSA 插件介绍
hw 插件
直接访问硬件设备
例:hw:2,0
特点:
不做任何格式转换
要求应用完全满足硬件参数(音频参数)
最底层、最快
应用要符合声卡的格式,否则无法打开。
plughw 插件
包装 hw 的插件版,可自动转换格式
例:plughw:2,0
特点:
自动处理采样率、通道数、位深
更灵活,但性能稍低于 hw
应用不需要自己处理格式转换
dmix 插件
最常用:软件混音插件
例:dmix:CARD=2,DEV=0
特点:
多进程可以同时播放(混音)
不占用整个声卡
桌面系统常用,如果声卡不支持硬件混音,这是必须的
softvol 插件
软件音量控制,当声卡本身没有音量调节时使用。
例:加一个虚拟音量控制器。
route 插件
改变声道的映射。比如单声道复制成左右声道。
9plug 插件
自动选择格式转换插件的“万能包装器”。
例:
plug:hw:0,0
等同于 plug 转换 + hw 输出。
file 插件
把音频输出到文件,而不是声卡。
null 插件
丢弃所有音频数据,就像 /dev/null。
自定义 plug + dmix 使用 hw:2,0
pcm.mydevice{typeplug slave.pcm{typedmix ipc_key1024slave{pcm"hw:2,0"rate48000}}}