組み込み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]
私が試したことは次のとおりです。
- I / Oエラーでないことを確認するために少なくとも10秒間ログを記録します。
- ハードウェアを確認してください。 MICを確認しましたが、I2S信号を測定するにはチップのピンのみを直接測定できるため、I2Sバスを確認するのは困難です。
以下はチップメーカーが提案する方法ですが、どのように実装するのかわかりません。
- 「Amixer または Tinymix を使用して、CODEC 内の ADC チャネルが開いていて音量がミュートになっていることを確認してください.」alsamixerで「キャプチャマイクパス」がオフになっていないこと、「デジタル」がミュートされていないことを確認しました。 ADCの状態を確認する方法がわかりません。
- 「コーデック側の入力信号発生器で生成された10kHz波形信号です。」これは、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
たとえば、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%