少于 1 分钟阅读 次阅读

问题描述

3568 Linux 播音正常,但使用gnome-sound-recorder录音,无声音。后面发现是录到的声音特别小,在图形界面上将麦克风输入的增益调到150%也改善不大。

分析

既然播音正常,说明 I2S 总线、时钟配置以及 RK809 的基础通信大概率是没问题的。所以怀疑录音没声音是因为 Ubuntu 上层音频服务(PulseAudio/PipeWire)的路由没配好,或者是 ALSA 层的混音器(Mixer)里录音通道被静音了。分层排查:

确认 ALSA 录音设备节点:

首先看系统有没有正确识别到录音设备。在终端执行:

arecord -l

可以看到输出是有识别到RK809的

**** CAPTURE 硬體裝置清單 ****
card 0: rockchiprk809co [rockchip,rk809-codec], device 0: fe410000.i2s-rk817-hifi rk817-hifi-0 [fe410000.i2s-rk817-hifi rk817-hifi-0]
  子设备: 0/1
  子设备 #0: subdevice #0

绕过上层直接用 ALSA 录音: 验证硬件层是否畅通.

配好 Mixer 后,暂时不管 Ubuntu 里的各种声音设置,直接用底层命令强行录一段 5 秒的音频试试(假设设备是 hw:0,0):

arecord -D hw:0,0 -f S16_LE -r 48000 -c 2 -d 5 test.wav

录完之后用 aplay test.wav 听一下。

  • 如果有声音: 说明驱动和硬件完全没问题,锅 100% 在 Ubuntu 的 PulseAudio/PipeWire,或者 ALSA UCM (Use Case Manager) 配置上。
  • 如果还是纯静音: 那说明问题比想象的底层。可能是 RK809 的 Mic Bias(麦克风偏置电压)没打开,这时候可能还得回头瞄一眼设备树里的 mic-in-vsel 之类的属性,或者用寄存器工具看一下 RK809 相关的 ADC 寄存器状态。

报错

arecord: main:852: 音乐打开错误: 设备或资源忙 

这是因为 Ubuntu 桌面的音频服务(通常是 PulseAudio 或 PipeWire)一开机就把声卡硬件死死霸占了。你加了 -D hw:0,0 参数,等于是想绕过系统直接抢硬件的独占权,系统肯定不让。

用 pasuspender 命令可以把 PulseAudio 暂时挂起,强制把硬件让出来给 arecord 用:

pasuspender -- arecord -D hw:0,0 -f S16_LE -r 48000 -c 2 -d 5 test.wav

播放使用

pasuspender -- aplay -D hw:0,0 test.wav

发现实际上是有声音的,只是非常小声,于是重新使用桌面的录音软件,发现也是这个情况。

实际原因

查看设备树发现问题,原理图的mic输入是单端的,但是设备树的配置是差分,改为单端的即可:

diff --git a/kernel/arch/arm64/boot/dts/rockchip/NK-R36S0.dtsi b/kernel/arch/arm64/boot/dts/rockchip/NK-R36S0.dtsi
index 013cf30dd..3f7194517 100755
--- a/kernel/arch/arm64/boot/dts/rockchip/NK-R36S0.dtsi
+++ b/kernel/arch/arm64/boot/dts/rockchip/NK-R36S0.dtsi
@@ -928,6 +928,5 @@ &pwm5 {
 
 &rk809_codec {
 	/delete-property/ spk-ctl-gpios;
+	/delete-property/ mic-in-differential;
 };

alt text

留下评论