·
Framework Laptop 13 (AMD Ryzen AI 300) Arch Linux 音频修复指南
测试环境:Framework Laptop 13 (AMD Ryzen AI 300 Series),Arch Linux,内核 6.18.7,PipeWire 1.4.10
问题描述
在 Framework Laptop 13 AMD 上安装 Arch Linux 后,遇到三个音频问题:
- 扬声器没声音 — 音频默认输出到 HDMI/DisplayPort 而不是内置扬声器
-
内置麦克风不工作 — DMIC 驱动(
acp-pdm-mach)在新版内核上有 bug,pavucontrol 中显示有信号跳动,但实际录制的要么是静音,要么是系统内部音频回环 - 麦克风底噪严重 — 修复麦克风后,安静环境下仍有明显的电流杂音
修复 1:切换音频输出到内置扬声器
默认 sink 被设置为 Radeon HDMI 音频输出,需要切换到内置扬声器:
pactl set-default-sink alsa_output.pci-0000_c1_00.6.analog-stereo
验证:
paplay /usr/share/sounds/freedesktop/stereo/bell.oga
修复 2:禁用 UCM(Use Case Manager)
这是 Framework 13 AMD 在 Linux 上的已知兼容性问题。UCM 配置文件会导致麦克风设备被错误路由。
创建 WirePlumber 配置文件禁用 UCM:
mkdir -p ~/.config/wireplumber/wireplumber.conf.d
cat > ~/.config/wireplumber/wireplumber.conf.d/alsa-config.conf << 'EOF'
monitor.alsa.properties = {
alsa.use-ucm = false
}
EOF
禁用后,pavucontrol 中的输入设备会从 Digital Microphone / Headset Mono Microphone 变为更正常的 Analog Stereo / Internal Microphone。
修复 3:Blacklist 坏掉的 DMIC 驱动
Framework 13 AMD 有三张声卡:
声卡 |
名称 |
说明 |
|---|---|---|
card 0 |
HD-Audio Generic |
HDMI 音频输出 |
card 1 |
HD-Audio Generic_1 |
Realtek ALC285(扬声器、耳机、模拟麦克风) |
card 2 |
acp-pdm-mach |
ACP PDM 数字麦克风阵列(内置 DMIC) |
card 2 的 DMIC 驱动在内核 6.16+ 上完全不能正常采集语音。即使 pavucontrol 显示绿色信号跳动,实际录到的只有噪声或系统回环音频。
Blacklist 相关模块,让系统回退到 card 1 的模拟麦克风:
sudo tee /etc/modprobe.d/disable-dmic.conf << 'EOF'
blacklist snd_soc_dmic
blacklist snd_acp_legacy_mach
blacklist snd_acp_pdm
EOF
需要重启生效。
重启后 acp-pdm-mach 会消失,系统将使用 #Realtek ALC285 的 Internal Microphone,这个可以正常录音。
修复 4:RNNoise AI 实时降噪
模拟麦克风能正常录音后,可能仍有底噪。降低增益可以缓解:
# 将麦克风增益从 100% 降到 35-50%
pactl set-source-volume @DEFAULT_SOURCE@ 35%
但更好的方案是启用 RNNoise 实时降噪。
安装依赖
# 从 AUR 安装 LADSPA 版本的 RNNoise
yay -S noise-suppression-for-voice
设置 LADSPA 路径
mkdir -p ~/.config/environment.d
echo "LADSPA_PATH=/usr/lib/ladspa" > ~/.config/environment.d/ladspa.conf
创建 PipeWire 降噪配置
mkdir -p ~/.config/pipewire/pipewire.conf.d
cat > ~/.config/pipewire/pipewire.conf.d/noise-suppression.conf << 'EOF'
context.modules = [
{ name = libpipewire-module-filter-chain
args = {
node.description = "Noise Canceling Source"
media.name = "Noise Canceling Source"
filter.graph = {
nodes = [
{
type = ladspa
name = rnnoise
plugin = librnnoise_ladspa
label = noise_suppressor_stereo
control = {
"VAD Threshold (%)" = 50.0
"VAD Grace Period (ms)" = 200
"Retroactive VAD Grace (ms)" = 0
}
}
]
}
capture.props = {
node.name = "capture.rnnoise_source"
node.passive = true
audio.rate = 48000
}
playback.props = {
node.name = "rnnoise_source"
media.class = Audio/Source
audio.rate = 48000
}
}
}
]
EOF
重启并设置默认输入
需要重启(或重新登录) 让 LADSPA_PATH 环境变量对 #PipeWire 服务生效。
重启后,用 wpctl 找到降噪源并设为默认:
# 查看降噪源的 ID
wpctl status | grep rnnoise
# 设为默认(将 ID 替换为实际数字)
wpctl set-default <rnnoise_source 的 ID>
持久化默认设备
为了避免每次重启后手动切换输出和输入设备:
cat > ~/.config/wireplumber/wireplumber.conf.d/default-nodes.conf << 'EOF'
[default-nodes]
default.audio.sink = { name = "alsa_output.pci-0000_c1_00.6.analog-stereo" }
default.audio.source = { name = "rnnoise_source" }
EOF
配置文件汇总
修复完成后,你应该有以下配置文件:
/etc/modprobe.d/disable-dmic.conf # Blacklist DMIC 驱动
~/.config/environment.d/ladspa.conf # LADSPA 插件路径
~/.config/wireplumber/wireplumber.conf.d/alsa-config.conf # 禁用 UCM
~/.config/wireplumber/wireplumber.conf.d/default-nodes.conf # 默认输入输出设备
~/.config/pipewire/pipewire.conf.d/noise-suppression.conf # RNNoise 降噪
测试方法
# 测试输出(应该能听到提示音)
paplay /usr/share/sounds/freedesktop/stereo/bell.oga
# 测试输入(录 10 秒然后播放,应该能清晰听到自己的声音,无底噪)
timeout 10 parecord --channels=2 --format=s16le --file-format=wav /tmp/test.wav
paplay /tmp/test.wav
参考链接
Repost this post?
Share with your followers.
Reply