alsa - arecord가 빈 wav 파일을 생성합니다.

alsa - arecord가 빈 wav 파일을 생성합니다.

임베디드 Linux에서 arecord를 통해 오디오 파일을 녹음하려고 하는데 파일이 비어 있습니다. Audacity에서는 다음과 같이 보입니다.

오디오 파일 파형

하지만 aplay를 통해 일반 오디오 파일을 재생할 수 있습니다. 나는 I2S를 통해 CPU에 연결된 RK809를 사운드 카드로 사용합니다. 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. I/O 오류가 아닌지 확인하기 위해 최소 10초 동안 로깅합니다.
  2. 하드웨어를 확인하세요. MIC를 확인했지만 I2S 신호를 측정하려면 칩의 핀만 직접 측정할 수 있기 때문에 I2S 버스를 확인하기가 어렵습니다.

다음은 칩 제조사에서 제안하는 방법인데 어떻게 구현해야 할지 모르겠습니다.

  1. "Amixer 또는 Tinymix를 사용하여 CODEC 내부의 ADC 채널이 열려 있고 볼륨이 음소거되어 있는지 확인하십시오."alsamixer에서 "캡처 마이크 경로"가 꺼지지 않았는지, "디지털"이 음소거되지 않았는지 확인했습니다. ADC 상태를 확인하는 방법을 모르겠습니다.
  2. "코덱 측의 입력 신호 발생기에서 생성된 10kHz 파형 신호입니다."이는 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.wav예를 들어 format 또는 alsa 를 사용하면 dat볼륨 0이 표시됩니다.-f S16_LE-f S32_LE

[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%

관련 정보