【Audio开发一】android音频问题排查指南

发布于:2025-03-30 ⋅ 阅读:(23) ⋅ 点赞:(0)

一,具体表现

可能遇到的音频问题表现多样,这里可以根据表现大致分类为功能异常、底噪异常和其它指标异常三类。

功能异常主要包括播放、录音的全部功能或部分流程无法完成,音频软硬件通路中存在报错或其它明显问题。如录音测试中生成了空白文件,播放文件没有声音等;

底噪异常是指播放与录音功能可以正常执行,但测试中表现出现主观听感异常或客观噪声指标不满足要求。例如在设备运行后录音出现干扰,播放静音数据出现异常噪音或单频尖峰;

其它指标异常则与底噪异常类似,是在功能可以正常执行的情况下,测试发现某些音频指标不满足规格或存在明显异常。

二,问题分析

所有音频问题,在开始分析之前,都需要先对软硬件情况进行一些基本检查,逐一排除设计或配置中的一些疏漏。

硬件上,主要对比标案原理图,并参考硬件设计指南音频部分,检查:
1、Audio外围的电源与阻容,是否和标案参考一致;
2、核对MIC类型,是否和推荐的电路结构相符,偏置\供电电路部分是否有调整,电路中调整过的部分,如偏置电阻、RC滤波的取值等是否合理;
3、如果使用耳机通道,是否清楚SOC耳机通道的驱动类型。对比标案核查是否遗漏了隔直电容、佐贝尔电路等元件\网络,HPoutFB是否按照硬件设计指南的指导正确引出并连接等。

软件上,主要核对基本的软件配置是否正确,包括:
1、确认音频采样率、通道切换开关、通道数量等是否正确;
2、确认MIC与Lineout的单端差分选项是否与硬件保持一致;
3、排除测试中可能的算法干扰,例如重采样算法、EQ、DRC等,需要核对以上软件算法以及芯片硬件是否被意外使能;
4、确定模拟增益、数字增益的大小是否合理等。

经过基本的检查确定无误后,再针对问题的现象类型进一步排查。

功能异常的情况下,除了针对小系统的原理图设计进行检查,也需要针对外围电路,例如功放电路进行检查核对。同时软件部分需要着重检查DTS配置、功放GPIO配置、asound.conf等是否存在问题。

底噪异常时,软件上需要核查异常出现的场景都有哪些模块被打开,可以尝试关闭不必要的模块、应用,复测问题是否与这些相关。硬件除了小系统的原理设计,也要关注外设的原理设计是否正确,同时针对PCB要检查走线布局、接地、电源情况。可以参考硬件设计指南或附件进行排查。硬件检查没有发现明显差错时,也可以通过增大滤波电容、变更接地点、外挂电源、打开调试模式等手段帮助定位问题。(请注意,上述帮助定位问题的手段仅适用于调试与明确问题,不可以直接作为解决问题的方式,更不能未经评估直接导入量产。)

其它指标异常时,需要对测试的条件再度确认,例如播放测试中的音频文件是否正确,与规格中的测试方法和测试条件进行核对,排除测试方法差异引入的问题。依照底噪异常的方式检查确认走线、接地,同时通过示波器等工具排查测试异常时是否出现了波形的失真、削波等。

三,解决办法

请参考相应平台的硬件设计指南、标案原理图、SDK、以及附件的分析思路图。
通过上述流程与思路分析问题,调整原理设计,优化PCB布局,完善软件配置。
在这里插入图片描述
四,实例分析
对于外放播放音乐杂音问题,需要自上而下分层分析,可能原因存在于应用层(audio framework、audio service、audio hal)亦可能存在于驱动层(audio driver),甚至存在于硬件。

4.1 根本原因

针对Audio HAL进行分析,可能的原因有:
1、相关参数配置错误;
2、cedarSE音效参数配置错误;
3、代码流程存在死锁导致持续性杂音。
针对Audio Driver进行分析,可能的原因有:
1、控件配置异常;
2、寄存器配置异常;
3、dapm route上电时序异常。

4.2 解决办法

1、确认Audio HAL是否异常:
1.1 将hal层dump打开
setprop persist.vendor.audio.dump_data.in true

1.2 将pcm dump 拉出来作分析
/data/vendor/hardware/audio_d/in.pcm //hal层处理前
/data/vendor/hardware/audio_d/out.pcm //hal层处理后

1.2.1 对于杂音类问题,只需听pcm dump是否有杂音即可确认问题端发生在应用层,如果in.pcm已存在杂音,则问题可能存在于audio hal之前,如audio service、软件编解码器、或者音源本身存在杂音;如果out.pcm存在杂音,in.pcm正常,则问题可能存在于audio hal、cedarSE;如果in.pcm与out.pcm均没有问题,可往下继续分析;

1.2.2 对于升级后声音大小、音效变化类问题,同样是对比in.pcm与out.pcm,确认问题出现在哪一层,如果in.pcm与out.pcm与升级前一致,则可往下继续分析;否则问题端定位在hal层;
1.3 使用tinyplay工具,确认是否存在杂音、声音大小以及音效变化,如果确认存在问题,则问题端可定位在audio driver端;

1.3.1 对于audio driver导致的杂音问题,可参考:
排除应用层影响

1、准备tinymix和tinyplay工具,以及幅度为0的静音音频文件;
2、使用tinymix打开播放通路,如"SPK Switch"控件等(根据所使用声卡、声卡控件等操作;
3、在相对安静的环节下,使用tinyplay播放静音文件,确认是否有杂音。

若无杂音,表示驱动层以下无问题,则需确认应用层是否引入了杂音。若仍有杂音,则需进一步排查。

1.3.2 对于audio driver导致的升级后声音大小、音效变化类问题,可先使用tinymix对比升级前后的控件,是否有差异,如有差异,将控件设为升级前状态,再进行测试确认现象;如果控件没有差异,可在播放时,dump一下寄存器并作对比,将升级前后的寄存器dump上传到Aservice供进一步分析,如果没有差异,则需寄板子、上传原理图与位号图,进行进一步排查分析。