定位源码
Android12
在sdk源码中搜索audio_policy_engine_stream_volumes.xml
find ./ -name "audio_policy_engine_stream_volumes.xml"
会搜索到许多个文件,如下图:
out目录下的文件就是编译过程从源码拷贝来的,可以通过计算out下xml文件的md5值,来判断源码对应的xml是哪个
md5sum ./out/target/product/工程目录/obj/ETC/audio_policy_engine_stream_volumes_intermediates/audio_policy_engine_stream_volumes.xml ./out/target/product/工程目录/vendor/etc/audio_policy_engine_stream_volumes.xml
打印如下:
8277d7f19555c52fa70ecf71f307aa79 ./out/target/product/工程目录/obj/ETC/audio_policy_engine_stream_volumes_intermediates/audio_policy_engine_stream_volumes.xml
8277d7f19555c52fa70ecf71f307aa79 ./out/target/product/工程目录/vendor/etc/audio_policy_engine_stream_volumes.xml
得到md5值8277d7f19555c52fa70ecf71f307aa79
再计算sdk其它xml的md5值,相等的就代表找到了, 如下图是./device/sprd/mpool/module/audio/msoc/qogirl6/system/etc/parameter-framework/audio_policy_engine_stream_volumes.xml
配置文件说明
audio_policy_engine_stream_volumes.xml
部分内容如下:
<volumeGroups>
<volumeGroup>
<name>voice_call</name>
<indexMin>1</indexMin>
<indexMax>7</indexMax>
<volume deviceCategory="DEVICE_CATEGORY_HEADSET">
<point>0,-4200</point>
<point>33,-2800</point>
<point>66,-1400</point>
<point>100,0</point>
</volume>
<volume deviceCategory="DEVICE_CATEGORY_SPEAKER">
<point>0,-2400</point>
<point>33,-1600</point>
<point>66,-800</point>
<point>100,0</point>
</volume>
<volume deviceCategory="DEVICE_CATEGORY_EARPIECE">
<point>0,-2700</point>
<point>33,-1800</point>
<point>66,-900</point>
<point>100,0</point>
</volume>
<volume deviceCategory="DEVICE_CATEGORY_EXT_MEDIA" ref="DEFAULT_MEDIA_VOLUME_CURVE"/>
<volume deviceCategory="DEVICE_CATEGORY_HEARING_AID" ref="DEFAULT_HEARING_AID_VOLUME_CURVE"/>
</volumeGroup>
<volumeGroup>
<name>system</name>
<indexMin>0</indexMin>
<indexMax>7</indexMax>
<volume deviceCategory="DEVICE_CATEGORY_HEADSET">
<point>1,-3000</point>
<point>33,-2600</point>
<point>66,-2200</point>
<point>100,-1800</point>
</volume>
<volume deviceCategory="DEVICE_CATEGORY_SPEAKER">
<point>1,-2400</point>
<point>33,-1800</point>
<point>66,-1200</point>
<point>100,-600</point>
</volume>
<!--volume deviceCategory="DEVICE_CATEGORY_SPEAKER" ref="DEFAULT_SYSTEM_VOLUME_CURVE"/-->
<volume deviceCategory="DEVICE_CATEGORY_EARPIECE" ref="DEFAULT_SYSTEM_VOLUME_CURVE"/>
<volume deviceCategory="DEVICE_CATEGORY_EXT_MEDIA" ref="DEFAULT_DEVICE_CATEGORY_EXT_MEDIA_VOLUME_CURVE"/>
<volume deviceCategory="DEVICE_CATEGORY_HEARING_AID" ref="DEFAULT_HEARING_AID_VOLUME_CURVE"/>
</volumeGroup>
.....
解释
这个文件是 Android 系统中用于配置音频策略引擎的音量控制参数的,下面是对它的详细解释:
- 整体结构
文件采用 XML 格式,主要通过 标签来组织不同的音量组,每个音量组都有特定的用途。 - 音量组(volumeGroup)
- voice_call 组
用途:主要用于控制语音通话的音量大小。
<indexMin>1</indexMin>
<indexMax>7</indexMax>
音量范围:其数值范围是 1 到 7。
- system 组
用途:负责控制系统声音,像按键音、通知音等都在此组控制范围内。
音量范围:数值范围为 0 到 7。
- 设备类别(deviceCategory)
针对不同的音频输出设备,系统会应用不同的音量曲线,具体设备类别如下:
- DEVICE_CATEGORY_HEADSET:指代头戴式耳机。
- DEVICE_CATEGORY_SPEAKER:指的是内置扬声器。
- DEVICE_CATEGORY_EARPIECE:表示听筒,也就是打电话时贴近耳朵的那个扬声器。
- DEVICE_CATEGORY_EXT_MEDIA:代表外部媒体设备。
- DEVICE_CATEGORY_HEARING_AID:指的是助听器。
- 音量曲线(volume 标签)
音量曲线借助一系列的点(point)来定义,每个点包含两个值,格式为 [百分比, dB值]:
- 百分比:是指音量滑块位置所对应的百分比。
- dB 值:表示实际的音量衰减值,单位是毫分贝(0 dB 意味着没有衰减)。
- 关键差异分析
- voice_call 组
当使用耳机(HEADSET)时,最小音量会衰减 42 dB,最大音量则没有衰减。
对于内置扬声器(SPEAKER),最小音量衰减 24 dB,最大音量无衰减。
听筒(EARPIECE)的最小音量衰减 27 dB,最大音量同样无衰减。
- system 组
耳机(HEADSET)的最小音量衰减 30 dB,最大音量衰减 18 dB。
内置扬声器(SPEAKER)的最小音量衰减 24 dB,最大音量衰减 6 dB。
系统音量整体要比通话音量小,这是为了避免干扰主要的通话功能。
6. 引用机制(ref 属性)
部分设备类别通过引用(ref)来使用默认的音量曲线,这样做可以简化配置,避免重复定义相同的曲线。
7. 音量调整算法
音量的调整不是线性的,而是遵循一种对数曲线规律,这与人耳对声音的感知方式相契合。具体来说,在低音量区域,较小的调整就能带来较明显的音量变化;而在高音量区域,需要较大的调整才能让音量有明显改变。
定制
最大音量等级
如下为通话音量等级,修改indexMax值7为15就是把最大音量等级改为15
<name>voice_call</name>
<indexMin>1</indexMin>
<indexMax>7</indexMax>
<name>voice_call</name>
<indexMin>1</indexMin>
<indexMax>15</indexMax>
修改音量曲线
如下图两列值,左列对应音量0到100%,右边对应音量的大小,单位是db值,形成4段曲线,
修改其值来实现音量曲线定制
相关文章
这篇是Android8的:【展讯】安卓修改音量等级曲线
作者:帅得不敢出门