当前位置:网站首页>RK3308--8声道改成双声道+录音增益
RK3308--8声道改成双声道+录音增益
2022-06-10 15:29:00 【猫咪老师nia~】
改为双声道
修改dts文件
相关路径:
Y:\hxy\RK3308\sdk-1.5\kernel\arch\arm64\boot\dts\rockchipY:\hxy\RK3308\sdk-1.5\kernel\Documentation\devicetree\bindings\soundY:\hxy\RK3308\sdk-1.5\kernel\sound\soc\rockchip
通过指令grep -rin "rockchip,rk3308-multi-dais"查找相关文件
相关文件:
rk3308-evb-dmic-pdm-v13.dtsrockchip,multidais.txtrockchip_multi_dais.c
对以下部分进行修改:
pdm_i2s_dais: pdm-i2s-dais {
status = "okay";
compatible = "rockchip,rk3308-multi-dais", "rockchip,multi-dais";
dais = <&pdm_8ch>, <&i2s_8ch_2>;
- capture,channel-mapping = <6 2>;
+ capture,channel-mapping = <2 0>;
playback,channel-mapping = <0 2>;
bitclock-inversion = <1 0>;
};
把 <6 2> 改成 <2 0>
一开始SDK刚拿到的时候,在维持8声道配置时编出固件时,用 arecord 指令录不了音(录后拷贝出来发现数据容量很小),其原因就是 dts 文件中有一个vccio口没配置好:
&io_domains {
status = "okay";
vccio0-supply = <&vcc_io>;
vccio1-supply = <&vcc_io>;
- vccio2-supply = <&vcc_io>;
+ vccio2-supply = <&vcc_1v8>;
vccio3-supply = <&vcc_1v8>;
vccio4-supply = <&vcc_1v8>;
vccio5-supply = <&vcc_io>;
};
从 RK_EVB_RK3308_DDR3P116SD4_V13_20181029.pdf 文件中可以看到各 vccio 的作用:
了解asound.conf的作用
路径:Y:\hxy\RK3308\sdk-1.5\buildroot\board\rockchip\rk3308\fs-overlay\etc
一开始查找路径时找到以下4个路径:
Y:\hxy\RK3308\sdk-1.5\buildroot\output\rockchip_rk3308_release\target\etcY:\hxy\RK3308\sdk-1.5\buildroot\output\rockchip_rk3308_64_dueros\target\etcY:\hxy\RK3308\sdk-1.5\buildroot\board\rockchip\rk3308\fs-overlay\etcY:\hxy\RK3308\sdk-1.5\buildroot\board\minnowboard\fs-overlay-graphical\etc
相关文件:asound.conf 和 Asound_Configuration_CN.pdf
录音增益
增益补丁包patch
路径:Y:\hxy\RK3308\sdk-1.5\buildroot\package\alsa-lib
文件:0005-add-gain-for-audio-input.patch,补丁包来着,这个其实已经过时了,里面要求改的 RK 默认的 pcm.c 就已经改好了,如果按照patch包的改法的话,有如下新增:
- 1171行的
static void add_gain_rk_16(void* pIn,int length, int channels) - 1205行的
static void add_gain_rk_32(void* pIn,int length, int channels) - 2096行的
add_gain_rk_16((void*)buffer, tmp * pcm->frame_bits / pcm->sample_bits, pcm->channels);函数 - 2103行的
add_gain_rk_32((void*)buffer, tmp * pcm->frame_bits / pcm->sample_bits, pcm->channels);函数
patch包的一些内容解析如下:
diff --git a/src/pcm/pcm.c b/src/pcm/pcm.c
index 9c90afb..281fbe3 100644
--- a/src/pcm/pcm.c ##原文件,a是原文件对应的目录
+++ b/src/pcm/pcm.c ##修改后的文件,b是对应目录,可通过下级目录找到这个文件
下面表示@@-旧文件开始行数,旧行数 +新文件开始行数,新行数@@;旧文件从825行的void DCBDoing开始,共6行;新文件也从825行开始,共23行:
@@ -825,6 +825,23 @@ void DCBDoing(void* pIn, int length, int channels)
}
}
#endif
+void add_gain(void* pIn, int length, int channels)
+{
+ int i = 0;
+ int16_t * pInBuf = (int16_t *)pIn;
+ char *alsa_gain_level = getenv("ALSA_LIB_ADD_GAIN");
+ if(alsa_gain_level) {
+ int level = atoi(alsa_gain_level);
+ //printf("gain level:%d\n",level);
+ for(i = 0; i < length; i ++ ) {
+ int curChannel = i % channels;
+ if(curChannel < channels - 2 ) {
//audio loopback no need to add gain
+ (*pInBuf) <<= level;
+ }
+ pInBuf++;
+ }
+ }
+}
修改pcm.c
路径:Y:\hxy\RK3308\sdk-1.5\buildroot\output\rockchip_rk3308_release\build\alsa-lib-1.1.5\src\pcm
在8声道的时候,录音得到的声音很小,有添加录音增益补丁之后,在控制台上输入指令export ALSA_LIB_ADD_GAIN=4才能实现录音增益;在刚修改完为双声道的时候,遇到了在控制台上输入上面指令失效的问题,这时候还要对 pcm.c 进行修改(notepad++快速跳转到某行的快捷方法:Ctrl+G):
1.2090行,snd_pcm_readi函数中有这样的一个判断条件:
if(pcm->channels != 2 && tmp > 0){
...}
改为以下:
if(pcm->channels <= 2 && tmp > 0) {
...}
2.增加一个2089行中一个printf信息如下:
printf("dcb size=%d,tmp=%d,sam_bits=%d,framebits=%d,format=%d,channels=%d,\n",size,tmp,pcm->sample_bits,pcm->frame_bits,pcm->format,pcm->channels);
3.注释掉add_gain_rk_16函数和add_gain_rk_32函数中的判断条件:
if(curChannel < channels - 2 ) {
...}
并各增加以下语句:
printf("rk_16 channels:%d level:%d \n",channels,level);
printf("rk_32 channels:%d level:%d \n",channels,level);
- 改完之后,要到
cd work/hxy/RK3308/sdk-1.5/buildroot/output/rockchip_rk3308_release/下执行make alsa-lib-rebuild命令 - 试过在
Y:\hxy\RK3308\sdk-1.5\buildroot\output\rockchip_rk3308_release\build\alsa-lib-1.1.5\src\pcm下进行make,但没有效果
mic硬件电路图
相关文件:EVB_CN.pdf
mic规格:MSM261D4030H1CPM
6+0+2 麦克风阵列方案说明
圆形麦克风阵列,对于不同的麦克风位置,可实现不同的通道组合,例如下图的方案,等间距布置在圆周上的6个麦克风
在本麦克风阵列方案中,圆周阵列麦也可设计用来做语音唤醒功能,因此不需要单独的唤醒麦。同时,为获得更好的回声消除效果,在左右声道喇叭网络上,通过主控自带的ADC将输出端的音频信号回采,这样的回采方式能最贴近喇叭播放的实际效果。
因此6+0+2麦克风阵列的含义是:6个圆周麦克风(capture)、0个唤醒麦、2路回采(playback)音频信号。
PDM麦克风原理图
电路中,每2个数字麦对应一个PDM_SDI信号,如下图,因此6个麦需要使用3个SDI信号:
连接座
FPC:Flexible Printed Circuit,挠性印刷电路
麦克风阵列子板通过30Pin_0.5mm间距的FPC线与RK3308_EVB主板连接,其接口定义如下:
PDM麦克风对应的PCB板丝印为: RK_EVB_DMIC-PDM_6C70_V11_20180427J
控制台console试验
录音arecord试验
1.先使用以下3个指令:
export ALSA_LIB_ADD_GAIN=4arecord -Dhw:0,0 -c 2 -r 8000 -f S16_LE /data/test01.wavaplay /data/test01.wav
使用以下printf 出的 log 信息如下(后面再源代码中注释掉了):
rk_16 channels:2 level:3
dcb size=1000,tmp=1000,sam_bits=16,framebits=32,format=2,channels=2,
改了文件系统类型试验
2.若文件系统类型改为ext2类型的话,会导致aplay无法播放音频,arecord能录到(有push出来进行试听)
dts参数修改意义的试验
问题1:capture,channel-mapping = <2 0>; 是不是意味着只用了6个mic中的2个,具体是哪两个?
答:通过物理试验,在麦上触摸会发出刺耳的声音,从而判断出是mic1和mic2。
问题2:用了 mic1 和 mic2,实际的录音是取的哪个mic的数据?是哪个mic声音大取哪个?还是合一起了?还是我们这边软件自己选取的?
答:通过音源离mic远近进行播放,听左右喇叭播出的声音有啥不同,如果是合成的,那两个喇叭播出来的声音应该是一样的,实际上并不是,而是 mic1 和 mic2 对应喇叭的左右声道。
问题3:手册上说PDM支持8路录音是什么意思?因为这里只有6个麦,对应只有6路才对,另外两路是干嘛的?
答:有可能另外两路是模拟mic,或者是其他输入源,如耳机。
边栏推荐
- You will never want to miss these vertical niche navigation websites
- How does CRM help enterprises and salespeople?
- 探索数据可视化开发平台FlyFish开源背后的秘密!
- SQL language
- VINS理论与代码详解0——理论基础白话篇
- "Bloom Cup" 5g Application Award grand slam! Several joint projects of guanghetong won the first, second and third prizes in the general product theme competition
- Explain the opencv function filter2d() in detail and remind you that the operation it does is not convolution but correlation operation
- Docket command
- Technology sharing | quick intercom, global intercom
- Yuntu says that every successful business system cannot be separated from apig
猜你喜欢

"Bloom Cup" 5g Application Award grand slam! Several joint projects of guanghetong won the first, second and third prizes in the general product theme competition

初学pytorch踩坑

Beginner pytorch step pit

港大、英伟达 | Factuality Enhanced Language Models for Open-Ended Text Generation(用于开放式文本生成的事实性增强语言模型)

2290. Minimum Obstacle Removal to Reach Corner

MySQL8安装详细步骤

Anti "internal roll", it is said that 360 enterprise security cloud will launch the "one click forced off duty" function, and the computer will automatically close the office software

视觉SLAM常见的QR分解SVD分解等矩阵分解方式求解满秩和亏秩最小二乘问题(最全的方法分析总结)

无线通信模组如何助力智能无人机打造“空中物联网”?

Recommend an easy-to-use designer navigation website
随机推荐
点投影到平面上的方法总结
Interpretation of cube technology | past and present life of cube Rendering Design
[cloud native | kubernetes] in depth RC, RS, daemonset, statefulset (VII)
Detailed installation steps of mysql8
百度开源ICE-BA安装运行总结
苹果式中文:似乎表达清楚意思了,懂了没完全懂的苹果式宣传文案
docket命令
SVM and ANN of OpenCV neural network library_ Use of MLP
Hessian matrix of convex function and Gauss Newton descent method
广和通高算力智能模组为万亿级市场5G C-V2X注智
Guanghetong cooperates with China Mobile, HP, MediaTek and Intel to build 5g fully connected PC pan terminal products
影刀RPA学习和遇见excel部分问题解决方式
Development of stm8s103f single chip microcomputer (1) lighting of LED lamp
Sorting and paging
opencv#4 手写体识别:自建训练集完美
Li Kou daily question - day 18 -350 Intersection of two data Ⅱ
Kubernetes 1.24:statefulset introduces maxunavailable copies
[object].
SQL语言
从“初代播种”到“落地生花”,广和通在5G商用三年间做了什么?