alsa - arecord 生成空白 wav 文件

alsa - arecord 生成空白 wav 文件

我正在尝试通过嵌入式 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]

阿尔萨混合器

这是我尝试过的:

  1. 记录至少 10 秒以确保不是 I/O 错误。
  2. 检查硬件。我查了MIC,但是很难查I2S总线,因为要测量I2S信号,只能直接测量芯片的引脚。

以下是芯片厂商建议的方法,但不知道如何实现:

  1. “使用amixer或tinymix检查CODEC内部的ADC通道是否打开并且音量是否静音。”在 alsamixer 中,我确定“捕获麦克风路径”没有关闭,并且“数字”没有静音。我不知道如何检查ADC的状态。
  2. “编解码器端输入信号发生器产生的10k Hz波形信号。”这是否意味着在I2S总线上发送信号?
  3. “使用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.wavdatformat-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%

相关内容