【Audio开发二】Android原生音量曲线调整说明

news2025/4/4 2:21:51

一,客制化需求
客户方对于音量加减键从静音到最大音量十五个档位区域的音量变化趋势有定制化需求。

二,音量曲线调试流程

Android根据不同的音频流类型定义不同的曲线,曲线文件存放在/vendor/etc/audio_policy_volumes.xml或者default_volume_tables.xml

对于安卓原生的音量曲线的调整,原生SDK里也默认提供了对应的安卓音量曲线配置文件提供用户进行定制化修改与应用验证。

安卓原生音量曲线配置文件路径:
(示例) /android/device/softwinner/ceres(具体项目方案)/common/media/audio/audio_policy_volumes_drc.xml

xref: /frameworks/av/services/audiopolicy/config/audio_policy_configuration.xml

<audioPolicyConfiguration version="1.0" xmlns:xi="http://www.w3.org/2001/XInclude">
   
   ............................................................................
 
    <xi:include href="audio_policy_volumes.xml"/>
    <xi:include href="default_volume_tables.xml"/>
 
    ............................................................................
 
</audioPolicyConfiguration>

在audio_policy_configuration.xml文件里面通过include包含了audio_policy_volumes.xml和default_volume_tables.xml

xref: /frameworks/av/services/audiopolicy/config/audio_policy_volumes.xml

<volume stream="AUDIO_STREAM_RING" deviceCategory="DEVICE_CATEGORY_EARPIECE"
                                   ref="DEFAULT_DEVICE_CATEGORY_EARPIECE_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_RING" deviceCategory="DEVICE_CATEGORY_EXT_MEDIA"
                                   ref="DEFAULT_DEVICE_CATEGORY_EXT_MEDIA_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_RING" deviceCategory="DEVICE_CATEGORY_HEARING_AID"
                                   ref="DEFAULT_HEARING_AID_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_MUSIC" deviceCategory="DEVICE_CATEGORY_HEADSET"
                                    ref="DEFAULT_MEDIA_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_MUSIC" deviceCategory="DEVICE_CATEGORY_SPEAKER"
                                    ref="DEFAULT_DEVICE_CATEGORY_SPEAKER_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_MUSIC" deviceCategory="DEVICE_CATEGORY_EARPIECE"
                                    ref="DEFAULT_MEDIA_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_MUSIC" deviceCategory="DEVICE_CATEGORY_EXT_MEDIA"
                                    ref="DEFAULT_MEDIA_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_MUSIC" deviceCategory="DEVICE_CATEGORY_HEARING_AID"
                                    ref="DEFAULT_HEARING_AID_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_ALARM" deviceCategory="DEVICE_CATEGORY_HEADSET"
                                    ref="DEFAULT_NON_MUTABLE_HEADSET_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_ALARM" deviceCategory="DEVICE_CATEGORY_SPEAKER">
    <point>0,-2970</point>
    <point>33,-2010</point>
    <point>66,-1020</point>
    <point>100,0</point>
</volume>

在audio_policy_volumes.xml中,规定了音频流类型(stream)、输出设备(deviceCategory)和音量曲线(ref)的关系,在default_volume_tables.xml中规定了具体的音量曲线的值

xref: /frameworks/av/services/audiopolicy/config/default_volume_tables.xml

<reference name="DEFAULT_DEVICE_CATEGORY_EARPIECE_VOLUME_CURVE">
<!--Default Volume Curve -->
    <point>1,-4950</point>
    <point>33,-3350</point>
    <point>66,-1700</point>
    <point>100,0</point>
</reference>

例如DEFAULT_DEVICE_CATEGORY_EARPIECE_VOLUME_CURVE曲线上的(index、db)值。定义的index范围是1到100, 而db的范围为-4950 到0。音量等级分成4段为100、66、33、1就是音量百分比;0,-1700,-3350,-4950就是对应百分比时衰减的音量,代表衰减-17db,-33.50db,-49.50db。

下面要看music音频流类型耳机所引用的xml。
audio_policy_volumes.xml

music headset对应的曲线是DEFAULT_DEVICE_CATEGORY_HEADSET_VOLUME_CURVE,
point的两个值分别为index 和db。 定义的index范围是1到100, 而db的范围为-4950 到0。音量等级分成4段为100、66、33、1就是音量百分比;0,-1700,-3350,-4950就是对应百分比时衰减的音量,代表衰减-17db,-33.50db,-49.50db。

外部的index范围不一定是1,100 比如外部index范围为0,15。
1.ui的index寻找在曲线index位置
那么第一步先将传递进去的index,转换为1,100等比例的位置。 假设传递是x, 要求等比例的y。
x/(15 -0) = y / (100 -1)。 假设传递的7 ,求出来y = 46。

2.寻找曲线index对应的分贝。
首先46是处在【33,66】的这个区间内,这个区间对应的db区间是【-3350,-1700】。先求这个区间一个index对应多少db 将总的index(66 -33)除于总的db(-1700 - (-3350)) 为单位index对应的db。那46对应的有多少index,46对应为 46 -33。 将这两者相乘就是46对应在这个区间内的db值, 加上起始的-3350就是最终的db。
db就在这个区间里面算。 所求的db = -3350 + (((- 1700 - (-3350))/(66 -33) x(46 -33)) = -2700。
也等比例计算的一个方式。 相对于一个个区间是独立。起始点是最靠近的上一个区间的index,然后计算区间内一个index对应多少db。传递进去的index相对于起始index的值

三,开发实例

3.1 客户方对于音量加减键从静音到最大音量十五个档位区域的音量变化趋势有定制化需求。

3.2 解决办法
对于安卓原生的音量曲线的调整,原生SDK里也默认提供了对应的安卓音量曲线配置文件提供用户进行定制化修改与应用验证。
安卓原生音量曲线配置文件路径:
(示例) /android/device/softwinner/ceres(具体项目方案)/common/media/audio/audio_policy_volumes_drc.xml
配置介绍:
示例配置如下图所示:
在这里插入图片描述

其中:
stream: AUDIO_STREAM_MUSIC/…
表示配置对象为MUSIC类型的音频流,常规音乐播放应用的都是MUSIC流,其他通知铃声等类型亦有对应类型stream;
deviceCategory: HEADSET/SPEAKER/…
表示配置对象为HEADSET带麦耳机或者是SPEAKER喇叭等输出设备,常规音乐播放应用的都是SPEAKER,表喇叭输出;
ref: DEFAULT_MEDIA_VOLUME_CURVE(默认)/自定义
表示对于上述MUSIC类型且输出设备为SPEAKER喇叭输出的音频流,需要配置的音频曲线是默认曲线参数,还是自定义参数曲线。
DEFAULT_MEDIA_VOLUME_CURVE:默认曲线参数:具体参数如下图所示:
在这里插入图片描述

其中,对于上述中的自定义音量曲线参数介绍如下:
上图中自定义音量曲线表示意义为,音量曲线变化划分为了四个区域点,三段变化线,从音量范围值1变化到音量范围值100,对应音量幅度变化从-3200单位对应变化到0单位,即音量值从最小衰减32dB,到最大时0dB不做任何幅度衰减。
具体变化趋势曲线如下图所示:
在这里插入图片描述

图示说明:
音量挡位范围(横轴,第一列配置值):0 ~ 100,范围值,范围从0 ~ 100,默认0为静音mute;
音量衰减量(纵轴,第二列配置值):-3200 ~ 0;输出衰减量,表示最小从-32dB,到最大0dB无衰减;
配置分析:音量挡位一般分为了三段区域变化,不同挡位区域由于其变化幅度不同,对应其音量衰减幅度不同,故音量响度变化程度就不同。
第一段. 1 ~ 33:在此挡位调节区域幅度变化为从-3200 ~ -2000,变化差值为1200;
第二段. 33 ~ 66:在此挡位调节区域幅度变化为从-2000 ~ -1200,变化差值为800;
第三段. 66 ~ 100:在此挡位调节区域幅度变化为从-1200 ~ 0,变化差值为1200;
横轴、纵轴值、段数在范围允许内皆可自行定义,但横轴越短、纵轴越长,斜率越大,则音量幅度变化则越明显,反之则同理。
故客户方可以根据上述描述理解,并按照对应格式自行定制需要的音量曲线变化。

3.3 小机验证方法:
在小机端以下路径存放了对应的配置文件,开机启动时会去加载读取该配置文件进行配置,客户方在调试时可以直接修改该小机端源文件后重启audio服务或直接机器重启即可生效验证。
/vendor/etc/audio_policy_volumes_drc.xml

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2327583.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

spring-security原理与应用系列:HttpSecurity.filters

目录 AnyRequestMatcher WebSecurityConfig HttpSecurity AbstractInterceptUrlConfigurer AbstractAuthenticationProcessingFilter 类图 在前面的文章《spring-security原理与应用系列&#xff1a;securityFilterChainBuilders》中&#xff0c;我们遗留了一个问题&…

JVM生产环境问题定位与解决实战(六):总结篇——问题定位思路与工具选择策略

本文已收录于《JVM生产环境问题定位与解决实战》专栏&#xff0c;完整系列见文末目录 引言 在前五篇文章中&#xff0c;我们深入探讨了JVM生产环境问题定位与解决的实战技巧&#xff0c;从基础的jps、jmap、jstat、jstack、jcmd等工具&#xff0c;到JConsole、VisualVM、MAT的…

并行治理机制对比:Polkadot、Ethereum 与 NEAR

治理是任何去中心化网络的基础。它塑造了社区如何发展、如何为创新提供资金、如何应对挑战以及如何随着时间的推移建立信任。随着 Web3 的不断发展&#xff0c;决定这些生态系统如何做出决策的治理模型也在不断发展。 在最近的一集的【The Decentralized Mic】中, Polkadot 汇…

TDengine tar.gz和docker两种方式安装和卸载

下载地址 3.1.1.0 Linux版本 安装包 下载地址 3.1.1.0 docker 镜像 下载地址 3.1.1.0 Window客户端 1. 将文件上传至服务器后解压 tar -zxvf TDengine-server-3.1.1.0-Linux-x64.tar.gz 2. tar.gz安装 解压文件后&#xff0c;进入相应子目录&#xff0c;执行其中的 install.…

【STM32设计】基于STM32的智能门禁管理系统(指纹+密码+刷卡+蜂鸣器报警)(代码+资料+论文)

本课题为基于单片机的智能门禁系统&#xff0c;整个系统由AS608指纹识别模块&#xff0c;矩阵键盘&#xff0c;STM32F103单片机&#xff0c;OLED液晶&#xff0c;RFID识别模块&#xff0c;继电器&#xff0c;蜂鸣器等构成&#xff0c;在使用时&#xff0c;用户可以录入新的指纹…

java知识梳理(二)

一.lambda表达式 作用&#xff1a;Lambda 表达式在 Java 8 引入&#xff0c;主要用于简化匿名内部类的写法&#xff0c;特别是在函数式编程场景中&#xff0c;比如 函数式接口、流式 API&#xff08;Streams&#xff09;、并发编程等。它让 Java 代码更简洁、可读性更强&#x…

鸿蒙Flutter实战:20. Flutter集成高德地图,同层渲染

本文以同层渲染为例&#xff0c;介绍如何集成高德地图 完整代码见 Flutter 鸿蒙版 Demo 概述 Dart 侧 核心代码如下&#xff0c;通过 OhosView 来承载原生视图 OhosView(viewType: com.shaohushuo.app/customView,onPlatformViewCreated: _onPlatformViewCreated,creation…

AI辅助下基于ArcGIS Pro的SWAT模型全流程高效建模实践与深度进阶应用

目前&#xff0c;流域水资源和水生态问题逐渐成为制约社会经济和环境可持续发展的重要因素。SWAT模型是一种基于物理机制的分布式流域水文与生态模拟模型&#xff0c;能够对流域的水循环过程、污染物迁移等过程进行精细模拟和量化分析。SWAT模型目前广泛应用于流域水文过程研究…

尚语翻译图册翻译|专业图册翻译|北京专业翻译公司推荐|专业文件翻译报价

内容概要 尚语翻译公司聚焦多语种产品图册翻译的竞价推广服务&#xff0c;通过行业垂直化运营构建差异化竞争力。其核心服务覆盖机械制造、医疗器械、电子元件三大领域&#xff0c;依托ISO 17100认证的翻译流程和Trados术语管理系统&#xff0c;实现技术文档的精准转化。为提升…

LeetCode 解题思路 30(Hot 100)

解题思路&#xff1a; 递归参数&#xff1a; 生成括号的对数 n、结果集 result、当前路径 path、左括号数 open、右括号数 close。递归过程&#xff1a; 当当前路径 path 的长度等于 n * 2 时&#xff0c;说明已经生成有效括号&#xff0c;加入结果集。若左括号数小于 n&…

Java EE(18)——网络原理——应用层HTTP协议

一.初识HTTP协议 HTTP(HyperText Transfer Protocol&#xff0c;超文本传输协议)是用于在客户端&#xff08;如浏览器&#xff09;和服务器之间传输超媒体文档&#xff08;如HTML&#xff09;的应用层协议。 HTTP协议发展至今发布了多个版本&#xff0c;其中1.0&#xff0c;1.…

强大而易用的JSON在线处理工具

强大而易用的JSON在线处理工具&#xff1a;程序员的得力助手 在当今的软件开发世界中&#xff0c;JSON&#xff08;JavaScript Object Notation&#xff09;已经成为了数据交换的通用语言。无论是前端还是后端开发&#xff0c;我们都经常需要处理、验证和转换JSON数据。今天&a…

Qt笔记----》不同环境程序打包

文章目录 概要1、windows环境下打包qt程序2、linux环境下打包qt程序2.1、程序目录2.2、创建一个空文件夹2.3、添加依赖脚本2.4、打包过程2.4.1、添加程序依赖库2.4.2、添加Qt相关依赖库 概要 qt不同运行环境下打包方式&#xff1a;windows/linux 1、windows环境下打包qt程序 …

企业服务器备份软件,企业服务器备份的方法有哪些?

企业服务器备份需综合考虑数据量、业务连续性要求&#xff08;RTO/RPO&#xff09;、合规性及成本等因素。以下是分场景的工具和方法指南&#xff1a; 一、备份软件推荐 1. 80KM备份软件 80KM备份软件可以进行很复杂的备份方式&#xff0c;也可以内网对内网备份、还能内网的…

html5炫酷图片悬停效果实现详解

html5炫酷图片悬停效果实现详解 这里写目录标题 html5炫酷图片悬停效果实现详解项目介绍技术栈核心功能实现1. 页面布局2. 图片容器样式3. 炫酷悬停效果缩放效果倾斜效果模糊效果旋转效果 4. 悬停文字效果5. 性能优化6. 响应式设计 项目亮点总结 项目介绍 本文将详细介绍如何使…

机器学习的一百个概念(5)数据增强

前言 本文隶属于专栏《机器学习的一百个概念》&#xff0c;该专栏为笔者原创&#xff0c;引用请注明来源&#xff0c;不足和错误之处请在评论区帮忙指出&#xff0c;谢谢&#xff01; 本专栏目录结构和参考文献请见[《机器学习的一百个概念》 ima 知识库 知识库广场搜索&…

在MCU工程中优化CPU工作效率的几种方法

在嵌入式系统开发中&#xff0c;优化 CPU 工作效率对于提升系统性能、降低功耗、提高实时性至关重要。Keil 作为主流的嵌入式开发工具&#xff0c;提供了多种优化策略&#xff0c;包括 关键字使用、内存管理、字节对齐、算法优化 等。本文将从多个方面介绍如何在 Keil 工程中优…

美团民宿 mtgsig 小程序 mtgsig1.2 分析

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 逆向分析 cp execjs.compile(open(民…

(done) MIT6.824 Lecture 02 - RPC and Threads

知乎专栏&#xff1a;https://zhuanlan.zhihu.com/p/641105196 原视频&#xff1a;https://www.bilibili.com/video/BV16f4y1z7kn?spm_id_from333.788.videopod.episodes&vd_source7a1a0bc74158c6993c7355c5490fc600&p2 看知乎专栏 一、Why we choose go&#xff1f…

LayaAir3.3.0-beta.3重磅更新!Spine4.2、2D物理、UI系统、TileMap等全面升级!

正式版推出前&#xff0c;说明3.3的功能还没开发完。所以&#xff0c;又一大波更新来了~ 下面对重点更新进行说明。 Spine的重要更新 3.3.0-beta.3版本开始&#xff0c;新增了Spine 4.2 的运行时库&#xff0c;Spine动画上可以支持物理特性了。例如&#xff0c;下图右侧女孩在启…