Android12 Framework定制音量等级与音量曲线

发布于:2025-07-10 ⋅ 阅读:(20) ⋅ 点赞:(0)

定位源码

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 系统中用于配置音频策略引擎的音量控制参数的,下面是对它的详细解释:

  1. 整体结构
    文件采用 XML 格式,主要通过 标签来组织不同的音量组,每个音量组都有特定的用途。
  2. 音量组(volumeGroup)
  • voice_call 组
    用途:主要用于控制语音通话的音量大小。
        <indexMin>1</indexMin>
        <indexMax>7</indexMax>

音量范围:其数值范围是 1 到 7。

  • system 组
    用途:负责控制系统声音,像按键音、通知音等都在此组控制范围内。
    音量范围:数值范围为 0 到 7。
  1. 设备类别(deviceCategory)
    针对不同的音频输出设备,系统会应用不同的音量曲线,具体设备类别如下:
  • DEVICE_CATEGORY_HEADSET:指代头戴式耳机。
  • DEVICE_CATEGORY_SPEAKER:指的是内置扬声器。
  • DEVICE_CATEGORY_EARPIECE:表示听筒,也就是打电话时贴近耳朵的那个扬声器。
  • DEVICE_CATEGORY_EXT_MEDIA:代表外部媒体设备。
  • DEVICE_CATEGORY_HEARING_AID:指的是助听器。
  1. 音量曲线(volume 标签)
    音量曲线借助一系列的点(point)来定义,每个点包含两个值,格式为 [百分比, dB值]:
  • 百分比:是指音量滑块位置所对应的百分比。
  • dB 值:表示实际的音量衰减值,单位是毫分贝(0 dB 意味着没有衰减)。
  1. 关键差异分析
  • 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的:【展讯】安卓修改音量等级曲线
作者:帅得不敢出门


网站公告

今日签到

点亮在社区的每一天
去签到