tinycap录音

录音问题免不了需要抓取原始的pcm数据分析波形,目前安卓大部分是基于tinyalsa去实现音频相关的接口,所以调试过程中很自然就得走这一步.

默认的MTK源码只include了tinyalsa的接口的so,并未把tinyalsa的命令工具默认编译进版本

源码目录external/tinyalsa下,单编译生成二进制可执行文件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 ------ 声卡
device ------ 设备 capture/playback tinycap肯定需要找对应的capture设备
channels ------ 通道数
rate ------ 采样率
bits ------位数
period_size — 单次采样片段大小
n_periods — 采样片段数
capture time — 录音时间

tinycap正式录pcm数据前,首先要先打开mixer配置,不熟悉的前提下,我们可以用逆向方式解决这一难题,即是
我们可以在不录制pcm数据的情况下,执行tinymix
可以看到如下配置状态:

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

随即我们可以先打开录音app再次使用tinymix查看配置变化

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:/ #

对比发现差异的配置就只有几项,于是这便为我们tinycap录制pcm数据打好了基础.

adb下设备执行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

最后执行即可抓取原始的录音pcm数据

tinycap /sdcard/file.wav -D 0 -d 1 -c 2 -r 48000 -b 16

猜你喜欢

转载自blog.csdn.net/jeephao/article/details/108228809