高通平台音频调试常见问题点归纳

更新时间:2023-05-07 22:13:55 阅读: 评论:0

⾼通平台⾳频调试常见问题点归纳
以下是关于⾼通⾳频调试中遇到的⼀些常见问题点归纳,仅供参考,如有错误,请指正!
1、Audio EC-VOIP
软件主要需要设置EC_REF(echo reference 信号),在Audio HAL的platform.c中,确保VOIP所经过的代码通路调⽤platform_t_echo_reference(adev,true,out_device);
同时,对应的mixer_l⽂件中,新增⼀path,⾥⾯添加使能EC_REF:
<path name="echo-reference">
<ctl name="AUDIO_REF_EC_UL1 MUX" value="I2S_RX">
</path>
2、使能、禁⽤Fluence
a、adb操作:
单mic情况下,设置fluencetype为none:
adb shell tprop ro.vendor.audio.sdk.fluencetype none
双mic情况下,设置如下:
adb shell tprop ro.vendor.audio.sdk.fluencetype fluence
adb shell tprop persist.vendor.audio.fluence.voicecall true
adb shell tprop persist.vendor.audio.fluence.voicerec true
adb shell tprop persist.vendor.audio.fluence.speaker true
注:不同的平台对应的属性名不⼀致,这些属性在代码中通过property_get函数调⽤,具体调⽤根据实际情况查看。 如msm8916平台:
源⽂件:hardware/qcom/audio/hal/msm8916/platform.c
调⽤函数:platform_init()函数:
b、上述只是代码中调⽤fluence算法相关的属性值来确定是否需要调⽤该算法,那么这些属性值的代码修改点如下: 源⽂件:device/qcom/msmxxxx/system.prop
ro.vendor.audio.sdk.fluencetype=fluence -->三种类型:none、fluence、fluencepro
persist.vendor.audio.fluence.voicecall=true -->true or fal
persist.vendor.audio.fluence.voicerec=true -->true or fal
persist.vendor.audio.fluence.speaker=true -->true or fal
3、查看DSP版本:
对于有ADSP的平台:
adb shell
adb pull firmware/image/adsp.b04    (⾼通⽂档中pull该⽂档出来不知有何⽤,先留着吧)
strings adsp.bo4 | grep "Q6_BUILD"
⽐如msm8937平台:
对于没有ADSP但有MDSP的平台:
adb shell
adb pull firmware/image/modem.b20
strings modem.b20 | grep "MPSS.DPM"
更换adsp image:
4、读写codec寄存器
关于QACT ADIE⽤法:
a. 在 QACT 主画⾯上,单击 ADIE RTC。
b. 单 击 Refresh , ⽤ 以 访 问 ⽬ 标 设 备 中 所 有 ADIE 寄 存 器 的 内 容 , 并 显 ⽰ 在ADIECalibratorTable 中。
c. 单击⽐特位 0到⽐特位 7的各复选框,以配置寄存器的值。对于设为 1的⽐特位,其对应的复选框应出现选中标记。
d. 单击 Commit, ⽤以将 ADIECalibratorTable 中所输⼊的值送回到⽬标设备。
5、Codec寄存器中的增益设置(Android KK(安卓4.4)及以后版本)
在 Android KK 及以后版本,codec 中的增益设置保存在 l 中。⾳频调试的时候,⽤户也可以通过 tinymix 命令来实时调试 codec 中的增益,得到合适的值后, 写⼊相对应的l。
数字增益:
"RXn Digital Volume"
"DECn Volume"
"IIRn INPx Volume"
以上增益按最⼩ 0 阶到最⼤ 124 阶设置, 步长 1 dB。 最⼩ 0 阶代表-84 dB,第 84阶为 0 dB, 最⼤ 124 阶为+40 dB。
模拟增益:
"ADCn Volume"
"LINEOUTn Volume"
"HPHL Volume"
"HPHR Volume"
"EAR PA Gain"
"SPK DRV Volume"
以上增益步长均为1dB。
tinymix命令格式: tinymix “name” value (如:tinymix “ADC1 Volume” 6)
加⼀点说明,DECn Volume 的增益位置在Tx端:
6、⾳频回环:编解码器回环,DSP⾳频前端回环,ALSA回环。
如下为MSM8996为例:
7、⾳频问题定位:
软件问题和调试问题的定位:
a、对于Voice:voice的基本架构和数据流图如下所⽰,不同平台间略有差异,不尽相同,此处只给出例⼦。
Voice的处理⼤致如下:
TX⽅向:能量转换(mic)–> A/D转换(Codec)–> ⾳频前处理(DSP)–>混⾳器 –> 协议栈 –> RF
RX⽅向:RF –> 协议栈 –> ⾳频分离(Audio/Voice)–> ⾳频后处理 (DSP)–> D/A转换(Codec)–> 能量转换
(Speaker/Headt)
Voice 问题的定位,应结合 Voice 的架构跟踪其数据流⾛向,逐步定位问题发⽣的位置。
Voice框架如下图:
语⾳通话数据流如下图:
b、对于Audio:下图很清晰的展现了 Android Audio Playback 的整个流程,分析该流程有助于我们定
位在播放⾳视频过程中,⾳频断续,⾳频有杂⾳的问题,我们通过 dump 出每⼀个节点的⾳频数据,就可以将问题定位出来。
Audio Playback数据流:
如何dump出SW处理的标准输出(AudioHardware)节点的pcm数据,需要作⼀下处理:
adb root
adb remount
adb shell
cd /data/xxx.pcm –> 进⼊代码中创建dump⽂件的位置。
touch xxx.dump –> 创建dump⽂件,⽂件名和代码中必须保持⼀致。
添加下述patch到代码中
make编译相应的库audio.primary.msmxxxx.so,然后push到⼿机
adb reboot
复现问题
adb pull /data/xxx.pcm 本地⽬录(注:如果linux导致⽂件不存在,需要解除linux,解除命令为:adb shell进⼊系
统,getenforce,tenforce 0即打开了权限)
利⽤ Audition/CoolEdit 听 dump 出来的 pcm ⽂件看是否有杂⾳/断续,如果已经有杂⾳/断续,说明在送⼊ dsp 之前问题就存在,可能需要软件先看⼀下。
patch如下:
8、FM⾳量调试
可以修改 DSP ⾥的 CodecRxGain 来改变 FM 的⾳量,但因为 Audio RecordPath 也⽤到CodecRxGain,因此修改 CodecRxGain 的会同时改变录⾳的⾳量。
代码上修改:
a、kernel/sound/soc/msm/qdsp6v2/msm-pcm-routing-v2.h
宏定义:
- #define INT_RX_VOL_MAX_STEPS 0x2000
+ #define INT_RX_VOL_MAX_STEPS 0x4000
- #define INT_RX_VOL_GAIN 0x2000
+ #define INT_RX_VOL_GAIN 0x4000
b、hardware/qcom/audio/hal/audio_extn/fm.c
static int32_t fm_t_volume(struct audio_device *adev, float value, bool persist)
{
...
- vol = lrint((value * 0x2000) + 0.5);
+ vol = lrint((value * 0x4000) + 0.5);
if (persist)
fmmod.fm_volume = value;
if (!fmmod.is_fm_running) {
ALOGV("%s: FM not active, ignoring t_fm_volume call",
__func__);
return -EIO;
}
}
9、⾳乐播放的⾳量调节
修改⾳频曲线来设置通话、 系统⾳、铃声、⾳乐播放、 闹铃、 提⽰⾳、 蓝⽛ SCO、按键⾳、 TTS ⾳量。
下⾯以⾳乐播放为例, 按以下⽅式修改可提⾼最低七级⾳量。
代码修改点:hardware/libhardware_legacy/audio/AudioPolicyManagerBa.cpp
const AudioPolicyManagerBa::VolumeCurvePoint
AudioPolicyManagerBa::sDefaultMediaVolumeCurve
[AudioPolicyManagerBa::VOLCNT] = {
- {1, -58.0f}, {20, -40.0f}, {60, -17.0f}, {100, 0.0f}
//To increa the lowest volume step
+ {1, -29.7f}, {20, -20.1f}, {60, -17.0f}, {100, 0.0f}
};
NOTE:说明:如下图,播放⾳乐时有 15 个等级,换算成 100 等分就是 100*index/15,最⼩到最⼤对应为
6,13,20,26,33,40,46,53,60,66,73,80,86,93,100,可以根据这个 index 在图⾥找到对应的分贝值,所以如果低 7 级声⾳太⼩,只要把前⾯两个点的坐标往上提就可以了。

本文发布于:2023-05-07 22:13:55,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/867172.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:什么是VMI
标签:问题   设置   需要   代码   增益   属性   调试   播放
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图