pulseaudio的alsa声卡加载流程
2026/4/2 12:36:57 网站建设 项目流程

PulseAudio 的 ALSA 模块(主要是 module-udev-detect + module-alsa-card)决定加载哪些 card 是有一套清晰的机制的,并且 完全由系统的 ALSA 声卡信息 + udev 规则决定,不取决于 asound.conf 或 plughw/hw 设置。

PulseAudio 加载 ALSA 声卡(Card)的核心流程

由 udev 探测可用的 ALSA 硬件卡

PulseAudio 在启动时会加载:

module-udev-detect

这个模块会监视:

/dev/snd/controlC*

只要某个 ALSA 卡在系统中出现了 control 节点,例如:

/dev/snd/controlC0 /dev/snd/controlC1

PulseAudio 就认定它是一个可用的硬件 sound card。

对每一个 /dev/snd/controlC,PulseAudio 自动加载 module-alsa-card*

监测到 card 后,PulseAudio 会为其创建一个卡对象(card object),并自动加载:

module-alsa-card

即:

发现 controlC0 → 加载 card0 → 加载 sinks/sources
发现 controlC1 → 加载 card1 → 同理
这一步不依赖用户配置。

PulseAudio 根据卡支持的 “Profiles” 决定创建哪些 sink/source

每个 ALSA card 的 UCM(Use Case Manager)或 fallback profile 定义了可用的 Profiles。例如:

analog-stereo analog-surround-5.1 hdmi-stereo off

PulseAudio 会扫描以下目录:

/usr/share/pulseaudio/alsa-mixer/profile-sets/

使用里面的 profile 配置文件,确定:

这个 ALSA card 应该创建哪些 sink(输出)
这个 ALSA card 应该创建哪些 source(输入)

UCM 配置存在时优先使用 UCM

如果声卡有:

/usr/share/alsa/ucm/<card name>/

PulseAudio 会优先使用 UCM 定义的:

PlaybackPCM
CapturePCM
Jack 切换逻辑
Devices/Modifiers
这是为什么 Jetson 或某些嵌入式平台会出现:

alsa_output.platform-sound.analog-stereo

这样的 sink 名称。

总结

PulseAudio 的 ALSA 模块决定加载哪些卡,核心依赖以下三点:

  1. /dev/snd/controlC* 是否存在(由内核 + udev 决定)

  2. 是否能加载 module-udev-detect(PulseAudio 自动处理)

  3. 是否能为该卡加载 module-alsa-card(PulseAudio 自动处理)

而不是由以下决定:

不是 asound.conf
不是 plughw/hw 设置
不是 aplay -L 的显示顺序
真正决定加载的只有 硬件卡是否被内核注册 + udev 是否报告给 PulseAudio。

我们要注意alsa的配置文件在pulseaudio默认是不产生效果的。

可以通过下面的命令查看所有pulseaudio已经加载的声卡。

pactl list cards short

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询