Los problemas de grabación inevitablemente necesitan capturar los datos pcm originales para analizar la forma de onda.Actualmente, la mayoría de Android se basa en tinyalsa para implementar interfaces relacionadas con el audio, por lo que es natural dar este paso en el proceso de depuración.
El código fuente predeterminado de MTK solo incluye el modo de la interfaz tinyalsa y no compila la herramienta de comando tinyalsa en la versión predeterminada
En el directorio de código fuente externo / tinyalsa, compile un solo archivo para generar un archivo ejecutable binario out / target / product / k37mv1_64_bsp / system / bin
tinyhostless
tinymix
tinypcminfo
tinycap
tinyplay
各种 命令 的 用法 por ejemplo.
adb root
adb shell
k37mv1_64_bsp: / # tinycap
Uso: tinycap file.wav [-D card] [-d device] [-c channels] [-r rate] [-b bits] [-p period_size] [-n n nperiods] [-T tiempo de captura]
tarjeta ------
dispositivo de tarjeta de sonido ------ dispositivo de captura / reproducción tinycap debe encontrar los
canales correspondientes del dispositivo de captura ------ número de canales
velocidad ------
bits de frecuencia de muestreo --- - -
Número de dígitos period_size-tamaño de segmento de muestreo único
n_periods-número de segmento de muestreo
tiempo de captura-tiempo de registro
Antes de que tinycap registre oficialmente los datos de pcm, primero abra la configuración del mezclador. Si no está familiarizado con él, podemos resolver este problema de manera inversa, es decir,
podemos ejecutar tinymix sin registrar los datos de pcm y
puede ver lo siguiente estado de configuración:
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
Luego, primero podemos abrir la aplicación de grabación y usar tinymix para ver los cambios de configuración
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:/ #
La comparación encontró que solo hay algunas configuraciones diferentes, por lo que esto sienta las bases para que nuestro tinycap registre datos pcm.
El dispositivo bajo adb ejecuta la configuración de ruta de 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
Finalmente ejecútelo para tomar los datos pcm de grabación originales
tinycap /sdcard/file.wav -D 0 -d 1 -c 2 -r 48000 -b 16