【RK3288 Android10, UNIK 声音过小 问题解决】
需求背景
T10 机器在Android6的固件中,将系统声音调整至最大,可以明显感受到声音失真。
产品部门认为 T10 的 UI板在播放语音时的声音主观感受嫌小(和Android6相比),需要增大。
音量调节框架
https://blog.csdn.net/NEY10MAR/article/details/119330046
https://blog.csdn.net/hejjunlin/article/details/103771247
整个音频文件的数据链路为:
源文件 -> MediaPlayer(解码) -> AudioSystem(计算音量曲线) -> AudioFlinger(混音) -> hardware/kernel(codec) -> 功放 -> 喇叭
以下是各级音频调节的增益环节, 主要包括framework层的音量曲线调节增益,audioflinger的mixer混音增益,codec的PCM volume增益,以及功放的增益
目前我们可以调整的音量增益的阶段有:
可以调整的增益阶段 |
---|
framework(音量曲线) |
native (混音浮点数增益) |
codec (左右声道的PCM VOLUME) |
功放 (gain0 gain1增益引脚) |
系统层音量
这一层主要是根据音频的流类型来选择对应的音频曲线,根据UI里面设置的音量来计算第一级的增益。
这一级在调试的时候发现,无论最大音量设置为15还是100,均可以到达音量曲线的最大顶点,通过调节UI的音量进度条可以到达最大增益0DB。所以这一层只将音量的最大值从15调整至100
代码路径
frameworks/services/core/java/com/android/server/audio/AudioService.java
本地层混音
这一层主要在audioflinger内,将多个audiotrack进行混音并放大,根据 UNITY_GAIN_FLOAT=1.0f 来进行进一步放大混音。
原本UNITY_GAIN_FLOAT 定义在AudioMixer.h中,生效于FastMixer.cpp和AudioMixer.cpp内部。
混音的流程是:先进行FastMixer混音,然后进行AudioMixer混音。
通过设置属性:ro.sys.mixer_unity_gain来自己设置对应的混音浮点增益。该属性的具体值定义在device/rockchip/rk3288/device.mk内。
代码路径
frameworks/av/media/libaudioprocessing/AudioMixer.cpp
frameworks/av/services/audioflinger/FastMixer.cpp
device/rockchip/rk3288/device.mk
codec
这一层主要是codec芯片的放大
根据datasheet,通过0x1a, 0x1b两个寄存器来设置左右声道的音量增益。
在功放一级确认是0,1的第二级放大的基础上,设置codec的音量增益到最大255
代码路径
kernel/sound/soc/codec/es8323.c
功放
这一层是功放的放大
有gain0, gain1两个引脚来设置功放的放大等级。
由于防止电压过大烧坏硬件,所以这个功放的放大等级限制为第二级(gain0 = 0, gain1 = 1)
代码路径
kernel/arch/arm/boot/dts/rk3288-keenon-unik.dts
gpio7_C3, gpio7_C4
音量调节标准
上层开始播放1kHZ 0DB 的正弦波音频,通过测量最后一级喇叭的输出电压的波形确认是否失真,在保证波形不失真的情况下,让音量达到最大。
各层音量调节增益设置
根据硬件的测试标准。
输入信号为:1khz,0DB正弦波
| 调试前声音小的各级配置 ||
| ------------ |
| framework(音量曲线) | – |
| native (混音浮点数增益) | 1.0f |
| codec (左右声道的PCM VOLUME) | 245 245 |
| 功放 (gain0 gain1增益引脚) | 0 1 |
调整功放增益引脚为 1, 1,出现严重波形削顶,舍弃
调整codec 增益为 255,255,波形正常,但是音量低于产品预期,改动保留
调整混音浮点数增益为 1.5, 波形正常,但音量仍低于产品预期
调整混音浮点数增益为 2, 波形略微有不对成的情况(高分贝部分有些许失真),音量符合产品预期,协调后保留
最终的各级增益参数设置为
| 调试后声音正常的各级配置 ||
| ------------ |
| framework(音量曲线) | – |
| native (混音浮点数增益) | 2.0f |
| codec (左右声道的PCM VOLUME) | 255 255 |
| 功放 (gain0 gain1增益引脚) | 0 1 |