音量调节堆栈

由于人耳对声音的听感具指数曲线,也就是对小音量比较敏感,随着声音的加大其听感随之变的不敏感,其变化近似指数函数曲线的形式。为了使听感变的近似直线的变化,人们在实践中就采用了音量变化近似对数式曲线型的电位器来实现这个目的。对比法产生音量控制曲线与最终扬声器输出的声压有关,当然您也可以根据扬声器的输出功率来进行比对,但功率终究不如电压来的方便。音量调节框的UI滑动条的刻度是线性的,这样就给我们生成音量控制曲线打下了很好的对比基础。

我们按音量调节键使得media音量逐级增加到最大。STREAM_MUSIC流的音量分为15级,调用堆栈如下:

AudioManger/handleKeyDown

adjustSuggestedStreamVolume

AudioService/adjustSuggestedStreamVolume

adjustStreamVolume

MSG_SET_SYSTEM_VOLUME

setSystemVolume

AudioSystem/setStreamVolumeIndex

jni调用native的AudioSystem

AudioPolicymanagerService

AudiopolicyManagerBase/setStreamVolumeIndex

checkAndSetVolume

computeVolume

volIndexToAmpl真正计算音量的地方

音量调节从CarAudioManager到tinyalsa

1、从CarAudioManager到AudioSystem

CarAudioManager:setGroupVolume(int groupId, int index, int flags)
CarAudioManager.java文件位置:    //音频焦点管理模块
packages/services/Car/car-lib/src/android/car/media/CarAudioManager.java
packages/services/Car/service/src/com/android/car/audio/CarAudioService.java
packages/services/Car/service/src/com/android/car/audio/CarAudioDeviceInfo.java

mUseDynamicRouting控制软音量调节和硬音量调节

音量组:例如音乐多媒体,蓝牙音乐,收音机等属于多媒体音量组。

2、从audiopolicy到audioflinger

frameworks/av/media/libaudioclient/AudioSystem.cpp
frameworks/av/media/libaudioclient/IAudioPolicyService.cpp

//音频流管理模块

AudioPolicyService主要通过AudioPolicyManager对外提供服务,而AudioFlinger并没有类似AudioFlingerManager这样的类,因为AudioFlinger主要向AudioPolicyService提供服务并不需要再向其他提供服务,所以两者进行了深度绑定

3、从audioflinger到audiohal

DeviceHalInterface有两种实现方式:DeviceHalHIDL和DeviceHalLocal,增加兼容导致架构更复杂了。audiohal层之后就是根据各个ROM厂商根据自身硬件进行适配,audiohal会根据每个厂商自行实现,但对上层接口保持一致。

CarAudio音量调节详解相关推荐

  1. Java 线程池及参数动态调节详解

    前前言:本文搬自:why技术 前言:曾经自诩对线程池了如指掌,不料看了美团的一篇技术文章后才知道原来线程池的参数还可以动态调节. 经典面试题 在这篇文章中我主要回答上面抛出的这个问题:你这几个参数的值 ...

  2. android pcm 音量_Android中实时获取音量分贝值详解

    基础知识 度量声音强度,大家最熟悉的单位就是分贝(decibel,缩写为dB).这是一个无纲量的相对单位,计算公式如下: 分子是测量值的声压,分母是参考值的声压(20微帕,人类所能听到的最小声压).因 ...

  3. php读音量大小,Android_Android中实时获取音量分贝值详解,基础知识 度量声音强度,大 - phpStudy...

    Android中实时获取音量分贝值详解 基础知识 度量声音强度,大家最熟悉的单位就是分贝(decibel,缩写为dB).这是一个无纲量的相对单位,计算公式如下: 分子是测量值的声压,分母是参考值的声压 ...

  4. hbuilderx的快捷键整理pdf_mac键盘快捷键详解,苹果电脑键盘快捷键图文教程

    作为 Apple 最成熟的系统之一,macOS 已经成为许多人每天都在接触的生产力工具.为了帮助大家更好地了解 macOS 的生态魅力,我们整理了这份融合了文字图片和动图的mac键盘快捷键详解,希望能 ...

  5. 【Android游戏开发之八】游戏中添加音频-详解MediaPlayer与SoundPoo!并讲解两者的区别和游戏中的用途!...

    为什么80%的码农都做不了架构师?>>>     李华明Himi 原创,转载务必在明显处注明: 转载自 [黑米GameDev街区] 原文链接:  http://www.himigam ...

  6. Android 系统(48)---WindowManager.LayoutParams 详解

    WindowManager.LayoutParams 详解 WindowManager.LayoutParams 是 WindowManager 接口的嵌套类:继承于 ViewGroup.Layout ...

  7. 电子元器件从入门到精通pdf_电子元件入门基础,常用电子元器件详解大全作用-涨知识必读...

    1.电子元器件筛选的必要性 电子元器件的固有可靠性取决于产品的可靠性设计, 在产品的制造过程中, 由于人为因素或原材料. 工艺条件. 设备条件的波动, 最终的成品不可能全部达到预期的固有可靠性. 在每 ...

  8. python使用视频_Python中操作各种多媒体,视频、音频到图片的代码详解

    我们经常会遇到一些对于多媒体文件修改的操作,像是对视频文件的操作:视频剪辑.字幕编辑.分离音频.视频音频混流等.又比如对音频文件的操作:音频剪辑,音频格式转换.再比如我们最常用的图片文件,格式转换.各 ...

  9. linux免采集卡直播ps4,PS4游戏直播采集卡使用教程详解

    在网络直播潮流中,ps4连接笔记本显示器进行的PS4游戏直播拥有着大批的主播与粉丝,而这其中也包括了PS4采集卡的鼎力相助.接下来同三维来PS4游戏直播采集卡使用教程详解. 一.准备阶段: 一台PS4 ...

最新文章

  1. 关于U盘安装ubuntu-18.04安装时候出现的grub-efi-amd64-signed的问题。
  2. [我的1024开源程序]30元写的广义误差分布函数
  3. python基本输入输出函数有_新手学Python,输入输出函数、赋值语句常见5个错误,弄懂即过关...
  4. Python 多进程向同一个文件写数据
  5. node-mysql中的连接池代码学习
  6. 哈哈,我的Blog开通了。。。
  7. [js] 举例说明js中什么是尾调用优化
  8. python 线性规划问题_一学高数,线代就头疼?让python帮你解决(内含教程)
  9. 2_less中的数值运算
  10. android电池充电动画,Android 开机充电图标和充电动画效果
  11. 凯恩帝k1000ti参数设置_K1000TII标准程序调试参数说明
  12. 5G时代将给智能营销笔记本带来什么样的改变
  13. gjt常用命令---chalee
  14. 动态规划(练习题目)
  15. 人生最好是随意,人生不可太随意!
  16. VMWare中安装Windows XP、win7
  17. ai人工智能培训老师讲师NLP自然语言处理讲师叶梓:人工智能之最新NLP自然语言处理技术与实战-10
  18. 数字经济绿色创新匹配:全国3169公司数字金融企业绿色专利匹配数据 2011-2019年
  19. 事后控制不如事中控制,事中控制不如事前控制
  20. Android Q app内存压缩优化方案介绍

热门文章

  1. 不要忘记监听$destroy事件来清除timer
  2. 阿里python认证_集成阿里云滑动验证(python)
  3. FileZilla 使用教程
  4. 边缘设备上的计算机视觉
  5. SDL教程零基础入门 简单操作 day1
  6. 从零开始学习SFR-- 2.0
  7. 土耳其计划出台国家网络安全新战略
  8. 怎么使用mp3转换器将mp4转换mp3格式
  9. 超5亿中国人的熬夜大赏,快看有你吗?
  10. 计算机英文桌面使用图标翻译,Windows电脑桌面翻译软件怎么实时在线中英文翻译及敬业签云便签翻译器怎么用...