Recording problems inevitably need to capture the original pcm data to analyze the waveform. At present, most of Android is based on tinyalsa to implement audio-related interfaces, so it is natural to take this step in the debugging process.
The default MTK source code only includes the so of the tinyalsa interface, and does not compile the tinyalsa command tool into the version by default
Under the source code directory external/tinyalsa, single compile to generate binary executable file out/target/product/k37mv1_64_bsp/system/bin
tinyhostless
tinymix
tinypcminfo
tinycap
tinyplay
各种命令的用法eg.
adb root
adb shell
k37mv1_64_bsp:/ # tinycap
Usage: tinycap file.wav [-D card] [-d device] [-c channels] [-r rate] [-b bits] [-p period_size] [-n n_periods] [-T capture time]
card ------ sound card
device ------ device capture/playback tinycap must find the corresponding capture device
channels ------ number of channels
rate ------ sampling rate
bits ----
--Number of digits period_size-single sampling segment size
n_periods-sampling segment number
capture time-recording time
Before tinycap officially records the pcm data, first open the mixer configuration. If you are not familiar with it, we can solve this problem in a reverse way, that is,
we can run tinymix without recording the pcm data and
you can see the following configuration status:
k37mv1_64_bsp:/ # tinymix
Mixer name: 'mt-snd-card'
Number of controls: 89
ctl type num name value
0 ENUM 1 Audio_Amp_R_Switch Off
1 ENUM 1 Audio_Amp_L_Switch Off
2 ENUM 1 Voice_Amp_Switch Off
3 ENUM 1 Speaker_Amp_Switch Off
4 ENUM 1 Headset_Speaker_Amp_Switch Off
5 ENUM 1 Headset_PGAL_GAIN -4Db
6 ENUM 1 Headset_PGAR_GAIN -4Db
7 ENUM 1 Handset_PGA_GAIN 8Db
8 ENUM 1 Lineout_PGAR_GAIN 0Db
9 ENUM 1 Lineout_PGAL_GAIN 0Db
10 ENUM 1 AUD_CLK_BUF_Switch Off
11 ENUM 1 Ext_Speaker_Amp_Switch Off
12 ENUM 1 Receiver_Speaker_Switch Off
13 ENUM 1 Audio_ADC_1_Switch Off
14 ENUM 1 Audio_ADC_2_Switch Off
15 ENUM 1 Audio_ADC_3_Switch Off
16 ENUM 1 Audio_ADC_4_Switch Off
17 ENUM 1 Audio_Preamp1_Switch OPEN
18 ENUM 1 Audio_ADC_1_Sel Preamp
19 ENUM 1 Audio_ADC_2_Sel Preamp
20 ENUM 1 Audio_ADC_3_Sel idle
21 ENUM 1 Audio_ADC_4_Sel idle
22 ENUM 1 Audio_PGA1_Setting 18Db
23 ENUM 1 Audio_PGA2_Setting 18Db
24 ENUM 1 Audio_PGA3_Setting 0Db
25 ENUM 1 Audio_PGA4_Setting 0Db
26 ENUM 1 Audio_MicSource1_Setting ADC1
27 ENUM 1 Audio_MicSource2_Setting ADC1
28 ENUM 1 Audio_MicSource3_Setting ADC1
29 ENUM 1 Audio_MicSource4_Setting ADC1
30 ENUM 1 Audio_MIC1_Mode_Select DCCMODE
31 ENUM 1 Audio_MIC2_Mode_Select DCCMODE
32 ENUM 1 Audio_MIC3_Mode_Select ACCMODE
33 ENUM 1 Audio_MIC4_Mode_Select ACCMODE
34 ENUM 1 Audio_Mic_Power_Mode normal
35 ENUM 1 Audio_Vow_ADC_Func_Switch Off
36 ENUM 1 Audio_Preamp2_Switch OPEN
37 ENUM 1 Audio_Vow_Digital_Func_Switch Off
38 ENUM 1 Audio_Vow_MIC_Type_Select HandsetAMIC
39 INT 1 Audio VOWCFG0 Data 0
40 INT 1 Audio VOWCFG1 Data 0
41 INT 1 Audio VOWCFG2 Data 8995
42 INT 1 Audio VOWCFG3 Data 42856
43 INT 1 Audio VOWCFG4 Data 111
44 INT 1 Audio VOWCFG5 Data 1
45 INT 1 Audio_VOW_State 0
46 ENUM 1 SineTable_DAC_HP Off
47 ENUM 1 DAC_LOOP_DAC_HS Off
48 ENUM 1 DAC_LOOP_DAC_HP Off
49 ENUM 1 Voice_Call_DAC_DAC_HS Off
50 ENUM 1 SineTable_UL2 Off
51 ENUM 1 Pmic_Loopback Off
52 INT 1 Audio HP ImpeDance Setting 5000
53 ENUM 1 Audio_Speaker_class_Switch CLASSAB
54 ENUM 1 Audio_Speaker_PGA_gain 12Db
55 ENUM 1 Audio_Speaker_OC_Falg Off
56 ENUM 1 Audio_Speaker_CurrentSensing Off
57 ENUM 1 Audio_Speaker_CurrentPeakDetector Off
58 INT 1 Audio AUXADC Data -1
59 ENUM 1 Speech_MD_USAGE Off
60 ENUM 1 Audio_Hdmi_SideGen_Switch Off
61 ENUM 1 Audio_i2s0_SideGen_Switch Off
62 ENUM 1 Audio_i2s0_hd_Switch Off
63 ENUM 1 Audio_ExtCodec_EchoRef_Switch Off
64 INT 1 Audio Mrgrx Volume 65536
65 ENUM 1 cmb stub Audio Control CMB_STUB_AIF_3
66 ENUM 1 Audio_I2S0dl1_hd_Switch Off
67 INT 1 Audio IRQ1 CNT 0
68 ENUM 1 deep_buffer_dl_hd_Switch Off
69 INT 1 deep_buffer_irq_cnt 0
70 ENUM 1 dl1bt_memif_select dl1
71 ENUM 1 Audio_FMTX_hd_Switch On
72 ENUM 1 Audio_SineGen_Switch OFF
73 ENUM 1 Audio_SineGen_SampleRate 48K
74 ENUM 1 Audio_SineGen_Amplitude 1/128
75 ENUM 1 Audio_Sidetone_Switch Off
76 ENUM 1 Audio_Mode_Switch Normal_Mode
77 INT 1 Audio HPL Offset 1974
78 INT 1 Audio HPR Offset 1986
79 ENUM 1 Audio_Debug_Setting Off
80 ENUM 1 Audio_Ipoh_Setting Off
81 ENUM 1 Audio_I2S1_Setting Off
82 INT 2 Audio_DL2_DataTransfer -1 -1
83 INT 1 Audio_LowLatency_Debug 0
84 INT 1 Audio_Assign_DRAM 0
85 ENUM 1 Pmic_Anc_Switch ANCON
86 INT 1 Audio FM I2S Volume 65536
87 ENUM 1 fast_dl_hd_Switch Off
88 ENUM 1 I2S low Jitter function Off
Then we can first open the recording app and use tinymix to view the configuration changes
k37mv1_64_bsp:/ # tinymix
Mixer name: 'mt-snd-card'
Number of controls: 89
ctl type num name value
0 ENUM 1 Audio_Amp_R_Switch Off
1 ENUM 1 Audio_Amp_L_Switch Off
2 ENUM 1 Voice_Amp_Switch Off
3 ENUM 1 Speaker_Amp_Switch Off
4 ENUM 1 Headset_Speaker_Amp_Switch Off
5 ENUM 1 Headset_PGAL_GAIN -4Db
6 ENUM 1 Headset_PGAR_GAIN -4Db
7 ENUM 1 Handset_PGA_GAIN 8Db
8 ENUM 1 Lineout_PGAR_GAIN 0Db
9 ENUM 1 Lineout_PGAL_GAIN 0Db
10 ENUM 1 AUD_CLK_BUF_Switch On
11 ENUM 1 Ext_Speaker_Amp_Switch Off
12 ENUM 1 Receiver_Speaker_Switch Off
13 ENUM 1 Audio_ADC_1_Switch On
14 ENUM 1 Audio_ADC_2_Switch On
15 ENUM 1 Audio_ADC_3_Switch Off
16 ENUM 1 Audio_ADC_4_Switch Off
17 ENUM 1 Audio_Preamp1_Switch IN_ADC1
18 ENUM 1 Audio_ADC_1_Sel Preamp
19 ENUM 1 Audio_ADC_2_Sel Preamp
20 ENUM 1 Audio_ADC_3_Sel idle
21 ENUM 1 Audio_ADC_4_Sel idle
22 ENUM 1 Audio_PGA1_Setting 18Db
23 ENUM 1 Audio_PGA2_Setting 18Db
24 ENUM 1 Audio_PGA3_Setting 0Db
25 ENUM 1 Audio_PGA4_Setting 0Db
26 ENUM 1 Audio_MicSource1_Setting ADC1
27 ENUM 1 Audio_MicSource2_Setting ADC1
28 ENUM 1 Audio_MicSource3_Setting ADC1
29 ENUM 1 Audio_MicSource4_Setting ADC1
30 ENUM 1 Audio_MIC1_Mode_Select DCCMODE
31 ENUM 1 Audio_MIC2_Mode_Select DCCMODE
32 ENUM 1 Audio_MIC3_Mode_Select ACCMODE
33 ENUM 1 Audio_MIC4_Mode_Select ACCMODE
34 ENUM 1 Audio_Mic_Power_Mode normal
35 ENUM 1 Audio_Vow_ADC_Func_Switch Off
36 ENUM 1 Audio_Preamp2_Switch IN_ADC3
37 ENUM 1 Audio_Vow_Digital_Func_Switch Off
38 ENUM 1 Audio_Vow_MIC_Type_Select HandsetAMIC
39 INT 1 Audio VOWCFG0 Data 0
40 INT 1 Audio VOWCFG1 Data 0
41 INT 1 Audio VOWCFG2 Data 8995
42 INT 1 Audio VOWCFG3 Data 42856
43 INT 1 Audio VOWCFG4 Data 111
44 INT 1 Audio VOWCFG5 Data 1
45 INT 1 Audio_VOW_State 0
46 ENUM 1 SineTable_DAC_HP Off
47 ENUM 1 DAC_LOOP_DAC_HS Off
48 ENUM 1 DAC_LOOP_DAC_HP Off
49 ENUM 1 Voice_Call_DAC_DAC_HS Off
50 ENUM 1 SineTable_UL2 Off
51 ENUM 1 Pmic_Loopback Off
52 INT 1 Audio HP ImpeDance Setting 5000
53 ENUM 1 Audio_Speaker_class_Switch CLASSAB
54 ENUM 1 Audio_Speaker_PGA_gain 12Db
55 ENUM 1 Audio_Speaker_OC_Falg Off
56 ENUM 1 Audio_Speaker_CurrentSensing Off
57 ENUM 1 Audio_Speaker_CurrentPeakDetector Off
58 INT 1 Audio AUXADC Data -1
59 ENUM 1 Speech_MD_USAGE Off
60 ENUM 1 Audio_Hdmi_SideGen_Switch Off
61 ENUM 1 Audio_i2s0_SideGen_Switch Off
62 ENUM 1 Audio_i2s0_hd_Switch Off
63 ENUM 1 Audio_ExtCodec_EchoRef_Switch Off
64 INT 1 Audio Mrgrx Volume 65536
65 ENUM 1 cmb stub Audio Control CMB_STUB_AIF_3
66 ENUM 1 Audio_I2S0dl1_hd_Switch Off
67 INT 1 Audio IRQ1 CNT 0
68 ENUM 1 deep_buffer_dl_hd_Switch Off
69 INT 1 deep_buffer_irq_cnt 0
70 ENUM 1 dl1bt_memif_select dl1
71 ENUM 1 Audio_FMTX_hd_Switch On
72 ENUM 1 Audio_SineGen_Switch OFF
73 ENUM 1 Audio_SineGen_SampleRate 48K
74 ENUM 1 Audio_SineGen_Amplitude 1/128
75 ENUM 1 Audio_Sidetone_Switch Off
76 ENUM 1 Audio_Mode_Switch Normal_Mode
77 INT 1 Audio HPL Offset 1974
78 INT 1 Audio HPR Offset 1986
79 ENUM 1 Audio_Debug_Setting Off
80 ENUM 1 Audio_Ipoh_Setting Off
81 ENUM 1 Audio_I2S1_Setting Off
82 INT 2 Audio_DL2_DataTransfer -1 -1
83 INT 1 Audio_LowLatency_Debug 0
84 INT 1 Audio_Assign_DRAM 0
85 ENUM 1 Pmic_Anc_Switch ANCON
86 INT 1 Audio FM I2S Volume 65536
87 ENUM 1 fast_dl_hd_Switch Off
88 ENUM 1 I2S low Jitter function Off
k37mv1_64_bsp:/ #
The comparison found that there are only a few different configurations, so this lays the foundation for our tinycap to record pcm data.
The device under adb executes the path setting of tinymix
tinymix Audio_ADC_1_Switch On
tinymix Audio_ADC_2_Switch On
tinymix Audio_Preamp1_Switch IN_ADC1
tinymix Audio_Preamp2_Switch IN_ADC3
Finally execute it to grab the original recording pcm data
tinycap /sdcard/file.wav -D 0 -d 1 -c 2 -r 48000 -b 16