作者| user_华仔、koda.xu、wenju.lu
芯片:SSD20X/21X/22X
Comake社区技术问题汇总,第20230421期,本期主要汇总了Audio开发相关的问题。
本期问题速览
▪ 如何消除音频播放时的pop音?
▪ 音频采集时发现取到的音频存在困顿时怎么处理?
▪ SSD20X支持可以支持两路AO输出吗?
▪ 分机对讲主机,在主机端听到有明显噪音,怎么定位问题?
▪ Dmic支持什么传输协议?
▪ 跑audio相关应用(aplay/tinyalsa)播放或者录音,出现overrun/underru
▪ SSD20X支持AMIC+DMIC同时使能吗?
▪ SSD20X可以支持pcm吗?要怎么设置?
▪ 如何调节Audio的HPF来控制低频信号的衰减?
▪ 如何查看和修改音频文件的音量?
Q1:如何消除音频播放时的pop音?
A1:先分析pop音的产生。
1. 先直接拉AMP的gpio脚,看看功放是否会有pop音,若有,是功放本身的问题。功放的问题可以先调节AO的输出增益,默认AO的增益范围为[-50,30],默认增益为0。可根据功放实际功率大小调高或调低AO的增益。若功放本身过高或过低时,AO增益实际可调节的范围会比较窄,这个时候就需要从硬件角度去调节,如修改外围电路或是替换功放芯片等。
2. 若排除了功放本身的问题,那pop声产生应该是内部电容充电过程产生。一般是用下面两种方式来处理:
a. DAC常供电。此时第一次enable audio时会有pop声,之后再次关闭/打开audio时不会有。但DAC常开可能会存在底噪(白噪声)。
b. DAC不常供电,audio enable时打开,audio disable时关闭。DAC打开时加延时等电容充电。DAC延时目前有经过调优,固定延时300ms,此值不需要修改。
默认DAC不常供电,未设置延时,需要设置为常供电或是不常供电但添加延时等待电容充电完成时,需要对dts做如下修改:
》》原帖地址
Q2:音频采集时发现取到的音频存在困顿时怎么处理?
A2:【SSD201、SSD202适用】
出现音频卡顿现象时请注意是否出现如下log:
[MI WRN ]: MI_AI_GetFrame[1348]: Dev0 Chn0 Buffer(s) is lost due to slow fetching!!!
如果出现上述log则代表的是AI数据丢了,取到的数据听起来会卡顿,原因有如下几种情况:
1、调用取流接口不及时,可通过在取流接口前后加时间戳打印进行确认;
2、output depth 设置太小,可以通过将output depth设置大一些(比如20)进行确认;
3、启用了算法,算法耗时过长,可以通过将算法关闭进行验证;
4、ai-dev ao-dev 的buf设置太小。
》》原帖地址
Q3:SSD20X支持可以支持两路AO输出吗?
A3:SSD20X支持两路lineout,但是因为内置DMA只有一路,所以就算两路lineout出来接两路功放,播放的数据是一样的,另,两路功放还是可以通过分开两个gpio pin分别控制是否使能,配置方式如下:
1. infinity2m.dtsi 找到sound 设备树节点。
2. infinity2m-ssc011a-s01a-padmux-display.dtsi (根据自己实际适用的padmux文件),根据硬件连接将对应控制gpio分别配置成AMP_PWL/AMP_PWR即可。
》》原帖地址
Q4:分机对讲主机,在主机端听到有明显噪音,怎么定位问题?
A4:1、参考音频调试文档,dump下AI音档,确认对应音档是否有问题。
2、如果dump的AI音档是正常的,要看看是否拿到ai数据后做编码之后出现的噪音(比如G711编码前后音档对比)。
Eg:日前发现个别案例dump的AI音档是正常的,但是远端主机确实能听到较强噪音,进一步定位是G711A编码代码处理的问题,导致编码后出现异常噪声,对应解决G711A编码问题即可。
3、如Audio编码后数据正常,则确认是否网络传输问题,可以将网络发送前跟主机端接受的数据做比较确认问题。
综上,如是AI dump音档后的audio数据是正常的,则需要应用协助往后端排查。
》》原帖地址
Q5:Dmic支持什么传输协议?
A5:Dmic支持的是PDM标准协议,在CLK 上升/下降会分别采集L/R声道Chn(外接Dmix有个L/R pin决定Mic本身是录制L/R通道信号)。
》》原帖地址
Q6:跑audio相关应用(aplay/tinyalsa)播放或者录音,出现overrun/underru
A6:一般AO播放时可能会遇到underrun,Ai录音时可能会遇到overrun,原因都是因为读写速度不匹配导致的,如AO播放,读取数据速度慢于采播放速度,或者AI录音写文件到mount的网盘或者U盘,这样速度比不上采样率速度(写本地内存文件就正常),就容易出现这种xrun现象,建议先本地排除,不要用mount设备。
》》原帖地址
Q7:SSD20X支持AMIC+DMIC同时使能吗?
A7:1. SSD20x最大可以支持:2chn Amic+4chn DMIC使用,对应使用Dev:AI_DEV_AMIC_AND_DMIC即可,使用这个Dev对应channel需要设置为6channel(2channel+4channel);
2. 其中chn0/chn1对应的是AMIC的数据(*chn0/chn1的数据是完全一致的,可以理解为只有一路AMIC);
3. chn2/chn3/chn4/chn5对应的就是4chn DMIC的数据。
使用场景:使用DMIC做语音识别的时候,AMIC可以跟功放直连当硬回采使用采集信号,跟DMIC的语音信号对比回声消除。
》》原帖地址
Q8:SSD20X可以支持pcm吗?要怎么设置?
A8:1.SSD20X支持PCM(不支持TDM),PCM 使用的是Mode A - MSB is transmitted of first BCLK after FRAME/SYNC ,请确认外设也是支持相同的Mode(SSD20X无法调整切换到MODE B)。
2.配置方式:打开infinity2m.h ,找到sound设备树节点,在对应的i2s-pcm栏位填1即可。
3.输出波形参考以下波形:
a.其中黄色的是FRAME信号(LRCK)/蓝色是BCLK( sclk)/红色是data out(这里写死的循环发送0x7F)
b.可以数据触发是在FRAME clk之后的第一个BLCK触发的,一个FRAME周期(一帧)带有16个BLCK
》》原帖地址
Q9:如何调节Audio的HPF来控制低频信号的衰减?
A9:kernel中有hpf属性来设置是否启用高通滤波和设置高通滤波强度等级。高通滤波强度等级可设为0~15。等级越低,HPF作用越强,低频信号衰减越严重,直流偏置越不明显;等级越高,HPF作用越弱,低频信号衰减越不明显,直流偏执越明显。用户可根据实际测试效果来选择合适的HPF等级。
》》原帖地址
Q10:如何查看和修改音频文件的音量?
A10:在确定设备实际可支持调节的音频增益范围时,一般会根据用户给定的测试文件来测试。可以借助ffmpeg工具来确认和修改测试文件的音频增益。
使用指令如下:
1. 查看音频分贝
ffmpeg.exe -i test_audio\test.mp3 -filter_complex volumedetect -c:v copy -f null /dev/null
-i 指定输入文件路径
2. 调整音频音量,一般有两种方式调节:
a. 调整音量倍数。直接对音频波的高度进行处理,可能会使音频出现失真现象。
ffmpeg.exe -i test_audio\test.mp3 -filter: "volume =2" test_audio\test_out_double_vol.mp3
ffmpeg.exe -i test_audio\test_out_double_vol.mp3 -filter_complex volumedetect -c:v copy -f null /dev/null
“volume=2 ”为调整音量为原来的两倍。可以改为其它值,如指定“volume=0.5”表示调整音量为原来的一半。
b. 调整音频分贝数值。会保留音频的原声效果。
ffmpeg.exe -i test_audio\test.mp3 -filter: "volume =-10dB" test_audio\test_out_-10db.mp3
ffmpeg.exe -i test_audio\test_out_-10db.mp3 -filter_complex volumedetect -c:v copy -f null /dev/null
“volume =-10dB”为增益降低10dB。可以改为其它值,如“volume =5dB”表示增益提高5dB。
需要注意的是,数字音乐都是用的满刻度电平(0dBFS(0dB Full Scale)),即把实际采样允许的最大值作为0dB,所以几乎所有音频的分贝属性都是负数,其中越接近0分贝的,播放音量越大。
》》原帖地址
如您在开发的过程中遇到Audio开发相关问题,或您需要技术支持、选型支持、商务支持,欢迎进入Comake社区开发论坛发帖咨询,社区技术工程师和运营人员将会及时响应您的诉求。
往期回顾
周五见| 点屏开发相关问题讲解
周五见| Sensor相关问题讲解
周五见| Uboot开发相关问题讲解
周五见| IQ与PQ调试相关FAQ
扫码进入论坛
原厂答疑|产品选型|官方资源
扫码咨询客服
SDK下载|芯片、开发板购买