Audio基础
1.PCM是什么?
1>.PCM的定义
最基本的概念:模拟信号是指随时间连续变化的物理量,将声音在磁带上记录成磁场强度的变化或在黑胶唱片上记录成沟槽大小的变化就是以模拟方式进行存储。数字信号则是离散的,计算机中的数据都是以数字方式存储的。模拟信号和数字信号可以相互转换,这里我们讨论的就是把模拟信号转换成数字信号。
脉冲编码调制(Pulse Code Modulation, PCM)是一种模拟信号的数字化方法。它是最常用、最简单的波形编码方式,但是也存在其它方法,比如脉冲密度调制(Pulse Density Modulation, PDM)。
2>.PCM的实现过程
下图就是脉冲编码调制的完整过程,简单概括为:采样,量化,编码。

具体来说就是:
1,将模拟信号按照同样的时间间距(即采样时间)进行采样。
2,按某种运算法确定样本值,即量化。
3,将样本值用二进制表示,即编码。
由上可见,脉冲编码调制实际上并没有"调制"的过程,而且也并没有脉冲出现,只因为PCM来源于PWM和PPM技术,所以也保留了"脉冲"二字。所以将脉冲编码调制(PCM)理解为"一种模拟信号的数字化方法"是最准确的。
2. MTK Audio问题分类及所需要的log

3.Audio Playback Dumps


4.案例分析
Case 1: 播放音乐杂音问题
所需Log:Mobile Log ;PCM data
分析步骤:
①关于杂音问题,先看PCM data,且Pcm data抓的dump点越多,则越详细越好,具体dump的点,参照前面截图的说明;
②若在Pcm的这些dump文件中,发现从某个文件开始出现杂音或断音,则是该环节的处理导致;
③如喇叭播放音乐,有时候能听到杂音的问题,从抓到的pcm dump来听, af_track_pcm.pcm没有杂音, 说明AP到track之间数据正常,mixer_drc_before.pcm也没有问题,但mixer_drc_after.pcm.有问题,则说明是DRC这个环节的处理引入的杂音, 需详细check DRC这个部分的算法和参数;
④同理,若是其他环节出问题,处理方式类似;
Case 2: Audio Playback/Record 无声问题
所需Log: Register info ;Mobile Log; PCM data
分析步骤:
①先看PCM data,若是pcm dump中某个环节的data出了问题,则结合mobile log针对这个环节详细检查代码逻辑, 详见case1的分析流程;
②若Pcm data中所有的.pcm都是有声音的, 则先检查mobile log中device是否设置正确, 若无问题,需检查interconnection以及PMIC的设定是否正确,这个检查必须结合Register逐个排查,才能有效判定 ;
③但通过打sinetone的方法,可以有效缩短排查范围, 所谓sinetone,就是通过设定特殊寄存器,用软件的方式去合成tone音, 不管输入和输出是否原本有data,只要DL/UL的通路是打开的,DL/UL就会有tone播出。 打sinetone的方法见4;
④下面是AFE-Interconnection的示意图; 我们可以在O3,O4打sinetone,若喇叭听不到tone音, 说明问题出现在后端PMIC这边; 需重点检查PMIC端的Register,看看是否有mute或通路没有打开;这样就有利缩小范围,快速定位问题。

⑤打tone音,可以通过这个register(AFE_SGEN_CON0)来设置 在需要的I/O口(bit31:28)输出指定频率(bit23:20,bit11:8)的tone音; 如,在O3,O4打48KHz的tone,通过adb敲入下面的cmd即可: adb shell "echo Setafereg,regaddr,0x01f0,regvalue, 0x2caa1aa1 > /sys/kernel/debug/mtksocaudio"

参考来源:
1.https://zhuanlan.zhihu.com/p/212318683
2.MTK FAQ

浙公网安备 33010602011771号