[Linux Audio Driver] QACT音效处理

随便写篇音频tuning的文档,这是前年实习的时候写的,恍如昨日。

1.概述

QACT(Qualcomm Audio Calibration Tool),高通音频处理工具,本文会介绍常见的acdb设备id以及以喇叭和麦克为例,介绍QACT中常见的音效处理模块。

2.常见acdb设备id介绍

2.1新增音频设备

若要新增一个音频设备的话,首先在hardware/qcom/audio/hal/msm8916/platform.h里面的enum里面增加一个枚举常量,然后在hardware/qcom/audio/hal/msm8916/platform.c里面的device_table里面增加设备的名字,然后在acdb_device_table增加它的acdb的id。

[Linux Audio Driver] QACT音效处理
打开QACT工具,依次点击ToolsDevice Designer,随便点击一个设备,后面的进制选择dec十进制显示,可以看到这个设备的acdb设备id是41,每一个音频设备的id都是唯一的,如果在platform.c里面使用了其他设备的id,那么就代表使用了其相应的XML配置,即音频数据流的routing与另一个设备是一致的。
一般我们新增一个音频设备是使用不同的acdb设备id的,可以点击如上图所示的Add+按键,之后选择一个未被使用过的acdb设备id即可,如何判断有没有使用过,这个id在platform.c文件里面可以确定。

2.2设备ID与问题定位

常见的acdb设备id有如下几个,双麦(41),喇叭(14),耳机(10)。最近处理过一个781的喇叭问题,就是一直播放没有声音,但是其routing配置也根据硬件电路,修改OK,之后执行命令:logcat | grep acdb,然后播放音乐。

[Linux Audio Driver] QACT音效处理

我们可以看到它对应的acdb设备id是10,而10如上面所示,是耳机对应的device id,所以这里的问题定位为:耳机是默认插入的。
我们需要在文件路径:kernel/msm-3.18/arch/arm/boot/dts/qcom/msm8953-audio.dtsi里面调整下"qcom,msm-mbhc-hphl-swh"的属性,这个属性有两个值,0代表常闭,即左声道和检测脚在耳机没有插入时短接的。反之,1代表常开,即左声道和检测脚在耳机插入时才能短接起来,这里我们把这个属性调整为1,问题迎刃而解。

3.音效处理模块

QACT工具功能非常强大,可以处理很多噪声、通话声音异常、音频设备功率等问题,这里主要以喇叭和麦克为例,介绍几个功能模块。

[Linux Audio Driver] QACT音效处理
由于喇叭输出设备,我们先切换到Audio Playback,然后找到SPKR_PHONE_SPKR_MONO,这个是喇叭对应的设备名,以下分别介绍GAIN增益控制模块;DRC,动态范围控制;IIR,频响滤波器还有ECNS,降噪模块。

3.1增益模块

[Linux Audio Driver] QACT音效处理

通过调整这个模块的增益参数,我们可以对喇叭的功率进行微调,粗调肯定是在mixer_paths_qrd_sku3.xml里面进行,通过连接滤波器小板,选择差分输出的方法就OK.

3.2 DRC模块

[Linux Audio Driver] QACT音效处理

我们将显示窗口替换为:Spec View,一般No of Bands选择三条线,我们可以在可以模块中调整线条的斜率,突变点的位置等等,主要实现下面三种功能:
把高于标准增益信号往下压;把低于标准,但是靠近标准的增益信号往上抬;把很低的噪声信号往下压。

3.3 IIR模块

[Linux Audio Driver] QACT音效处理

如果有些特定频率的音频信号,过高或者过低的话,我们可以针对频率点微调增益。

3.4 ECNS降噪模块

[Linux Audio Driver] QACT音效处理

由于麦克是输入设备,所以切换到Audio Recording,Device Use case切换到HANDSET_MIC_ENDFIRE_FLUENCEV5(这对应的是双麦,device id是41)。这个降噪模块,高通有一套标准参数,我们一般可以使用那个参数。
另外综合上面的信息,若要解决噪声问题,还可以上面所述的IIR修改个别频率点,或者DRC把远低于标准的信号压下去。