我正在尝试通过嵌入式 Linux 上的 arecord 录制音频文件,但该文件是空白的。在 Audacity 中,它看起来像这样:
但我可以通过aplay播放普通音频文件。我使用RK809作为声卡,通过I2S连接到cpu。 RK809连接有模拟麦克风,模拟音频经过RK809处理后通过I2S总线传输到CPU。
以下是有关它的一些信息:
[root@DCIR:~]# cat /proc/asound/cards
0 [rockchiprk809co]: rockchip_rk809- - rockchip,rk809-codec
rockchip,rk809-codec
7 [Loopback ]: Loopback - Loopback
Loopback 1
[root@DCIR:~]# amixer scontrols
Simple mixer control 'Master',0
Simple mixer control 'Playback Path',0
Simple mixer control 'Capture MIC Path',0
Simple mixer control 'Digital',0
[root@DCIR:~]# amixer controls
numid=3,iface=MIXER,name='Master Playback Volume'
numid=2,iface=MIXER,name='Capture MIC Path'
numid=1,iface=MIXER,name='Playback Path'
numid=4,iface=MIXER,name='Digital Capture Volume'
[root@DCIR:~]# amixer scontents
Simple mixer control 'Master',0
Capabilities: pvolume
Playback channels: Front Left - Front Right
Limits: Playback 0 - 100
Mono:
Front Left: Playback 100 [100%] [0.00dB]
Front Right: Playback 100 [100%] [0.00dB]
Simple mixer control 'Playback Path',0
Capabilities: enum
Items: 'OFF' 'RCV' 'SPK' 'HP' 'HP_NO_MIC' 'BT' 'SPK_HP' 'RING_SPK' 'RING_HP' 'RING_HP_NO_MIC' 'RING_SPK_HP'
Item0: 'SPK_HP'
Simple mixer control 'Capture MIC Path',0
Capabilities: enum
Items: 'MIC OFF' 'Main Mic' 'Hands Free Mic' 'BT Sco Mic'
Item0: 'Main Mic'
Simple mixer control 'Digital',0
Capabilities: cvolume
Capture channels: Front Left - Front Right
Limits: Capture 0 - 100
Front Left: Capture 100 [100%] [0.00dB]
Front Right: Capture 100 [100%] [0.00dB]
这是我尝试过的:
- 记录至少 10 秒以确保不是 I/O 错误。
- 检查硬件。我查了MIC,但是很难查I2S总线,因为要测量I2S信号,只能直接测量芯片的引脚。
以下是芯片厂商建议的方法,但不知道如何实现:
- “使用amixer或tinymix检查CODEC内部的ADC通道是否打开并且音量是否静音。”在 alsamixer 中,我确定“捕获麦克风路径”没有关闭,并且“数字”没有静音。我不知道如何检查ADC的状态。
- “编解码器端输入信号发生器产生的10k Hz波形信号。”这是否意味着在I2S总线上发送信号?
- “使用arecord或者tinycap来记录,定位问题发生在用户态还是内核态。”我使用命令
arecord -D hw:0,0 -d 2 -f cd -c 2 -vv -t wav test.wav
来录制,生成一个空白文件。
(更新:)
[root@DCIR:/]# ls -ails /dev/snd
total 0
181 0 drwxr-xr-x 3 root root 240 Aug 4 09:00 .
1025 0 drwxr-xr-x 13 root root 4200 Aug 4 09:00 ..
8996 0 drwxr-xr-x 2 root root 80 Aug 4 09:00 by-path
1097 0 crw-rw---- 1 root audio 116, 0 Aug 4 09:00 controlC0
187 0 crw-rw---- 1 root audio 116, 224 Aug 4 09:00 controlC7
1096 0 crw-rw---- 1 root audio 116, 24 Aug 4 09:00 pcmC0D0c
1095 0 crw-rw---- 1 root audio 116, 16 Aug 4 09:00 pcmC0D0p
184 0 crw-rw---- 1 root audio 116, 248 Aug 4 09:00 pcmC7D0c
183 0 crw-rw---- 1 root audio 116, 240 Aug 4 09:00 pcmC7D0p
186 0 crw-rw---- 1 root audio 116, 249 Aug 4 09:00 pcmC7D1c
185 0 crw-rw---- 1 root audio 116, 241 Aug 4 09:00 pcmC7D1p
182 0 crw-rw---- 1 root audio 116, 33 Aug 4 09:00 timer
我用示波器测量了声卡(rk809)与CPU之间I2S总线的SDO/PDMDATA信号,发现录音时有输出信号。
当我使用arecord -Dhw:0,0 -f cd -d 5 -vvv audio.wav
、dat
format-f S16_LE
或 时-f S32_LE
,alsa 得到卷 0,例如。
[root@DCIR:~]# arecord -Dhw:0,0 -f cd -d 5 -vvv audio.wav
Recording WAVE 'audio.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
Hardware PCM card 0 'rockchip,rk809-codec' device 0 subdevice 0
Its setup is:
stream : CAPTURE
access : RW_INTERLEAVED
format : S16_LE
subformat : STD
channels : 2
rate : 44100
exact rate : 44100 (44100/1)
msbits : 16
buffer_size : 22052
period_size : 5513
period_time : 125011
tstamp_mode : NONE
tstamp_type : MONOTONIC
period_step : 1
avail_min : 5513
period_event : 0
start_threshold : 1
stop_threshold : 22052
silence_threshold: 0
silence_size : 0
boundary : 1445199872
appl_ptr : 0
hw_ptr : 0
Max peak (11026 samples): 0x00000001 # 0%
Max peak (11026 samples): 0x00000001 # 0%
Max peak (11026 samples): 0x00000001 # 0%
Max peak (11026 samples): 0x00000001 # 0%
Max peak (11026 samples): 0x00000001 # 0%
Max peak (11026 samples): 0x00000001 # 0%
Max peak (11026 samples): 0x00000001 # 0%
Max peak (11026 samples): 0x00000001 # 0%
但是当我使用 时S24_LE
,我得到了 200% 的音量:
[root@DCIR:~]# arecord -Dhw:0,0 -r 44100 -f S24_LE -c 2 -d 10 -vvv audio.wav
Recording WAVE 'audio.wav' : Signed 24 bit Little Endian, Rate 44100 Hz, Stereo
Hardware PCM card 0 'rockchip,rk809-codec' device 0 subdevice 0
Its setup is:
stream : CAPTURE
access : RW_INTERLEAVED
format : S24_LE
subformat : STD
channels : 2
rate : 44100
exact rate : 44100 (44100/1)
msbits : 32
buffer_size : 22052
period_size : 5513
period_time : 125011
tstamp_mode : NONE
tstamp_type : MONOTONIC
period_step : 1
avail_min : 5513
period_event : 0
start_threshold : 1
stop_threshold : 22052
silence_threshold: 0
silence_size : 0
boundary : 1445199872
appl_ptr : 0
hw_ptr : 0
Max peak (11026 samples): 0x00ffffff #################### 200%
Max peak (11026 samples): 0x00ffffff #################### 200%
Max peak (11026 samples): 0x00ffffff #################### 200%
Max peak (11026 samples): 0x00ffffff #################### 200%
Max peak (11026 samples): 0x00ffffff #################### 200%
Max peak (11026 samples): 0x00ffffff #################### 200%