ALSA 作为 Linux 内核声卡驱动 替代了 OSS ,它首先是一个内核驱动框架。其次,这个项目包含了 alsa-lib , 也就是 libasound ,这个 C 库封装了 ALSA 的用户空间接口。在此基础上,有 alsa-utils ,首先了包括 aplay 、 arecord 、 amixer 这些命令行工具,以及 alsamixer ,这是一个基于 ncurses 的 TUI 工具。
在 aplay 和 arecord 的时候可以通过 -D 参数指定 PCM 设备,其命名就可以是 hw:card,pcm 形式的,例如: hw:0,0 。
可以通过 /proc/asound/cards 查看声卡设备:
cat /proc/asound/cards
例如:
0 [PCH ]: HDA-Intel - HDA Intel PCH
HDA Intel PCH at 0x6001120000 irq 144
1 [Webcam ]: USB-Audio - Q8 HD Webcam
DHZJ-230522-J Q8 HD Webcam at usb-0000:00:14.0-5, high speed
这里就有两个声卡,并且列出了相关信息。
PCM 设备可以通过 /proc/asound/pcm 查看:
cat /proc/asound/pcm
例如:
00-00: ALC269VB Analog : ALC269VB Analog : playback 1 : capture 1
00-03: HDMI 0 : HDMI 0 : playback 1
00-07: HDMI 1 : HDMI 1 : playback 1
00-08: HDMI 2 : HDMI 2 : playback 1
00-09: HDMI 3 : HDMI 3 : playback 1
01-00: USB Audio : USB Audio : capture 1
这里就有 6 个 PCM 设备:
hw:0,0 :支持播放( playback )和录音( capture )hw:0,3 :仅播放hw:0,7 :仅播放hw:0,8 :仅播放hw:0,9 :仅播放hw:1,0 :仅录音至于具体的设备支持什么参数,可以通过 aplay 和 arecord 在通过 -D 指定设备后跟上 --dump-hw-params 来查看,例如:
arecord -D hw:1,0 --dump-hw-params
输出:
Recording WAVE 'stdin' : Unsigned 8 bit, Rate 8000 Hz, Mono
HW Params of device "hw:1,0":
--------------------
ACCESS: MMAP_INTERLEAVED RW_INTERLEAVED
FORMAT: S16_LE
SUBFORMAT: STD
SAMPLE_BITS: 16
FRAME_BITS: 16
CHANNELS: 1
RATE: [8000 48000]
PERIOD_TIME: [1000 1000000]
PERIOD_SIZE: [32 48000]
PERIOD_BYTES: [64 96000]
PERIODS: [2 1024]
BUFFER_TIME: (1333 2000000]
BUFFER_SIZE: [64 96000]
BUFFER_BYTES: [128 192000]
TICK_TIME: ALL
--------------------
arecord: set_params:1352: Sample format non available
Available formats:
- S16_LE
这里有些信息就比较有用,比如这个设备只支持单通道( CHANNELS: 1 )、只支持 S16_LE 格式……
具体声卡对应的驱动:
cat /proc/asound/modules