yanghn2002

View My GitHub Profile

ALSA 作为 Linux 内核声卡驱动 替代了 OSS ,它首先是一个内核驱动框架。其次,这个项目包含了 alsa-lib , 也就是 libasound ,这个 C 库封装了 ALSA 的用户空间接口。在此基础上,有 alsa-utils ,首先了包括 aplayarecordamixer 这些命令行工具,以及 alsamixer ,这是一个基于 ncurses 的 TUI 工具。

声卡、设备

aplayarecord 的时候可以通过 -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 设备:

  1. hw:0,0 :支持播放( playback )和录音( capture )
  2. hw:0,3 :仅播放
  3. hw:0,7 :仅播放
  4. hw:0,8 :仅播放
  5. hw:0,9 :仅播放
  6. hw:1,0 :仅录音

至于具体的设备支持什么参数,可以通过 aplayarecord 在通过 -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