CarAudio音量调节详解

音量调节堆栈

    由于人耳对声音的听感具指数曲线,也就是对小音量比较敏感,随着声音的加大其听感随之变的不敏感,其变化近似指数函数曲线的形式。为了使听感变的近似直线的变化,人们在实践中就采用了音量变化近似对数式曲线型的电位器来实现这个目的。对比法产生音量控制曲线与最终扬声器输出的声压有关,当然您也可以根据扬声器的输出功率来进行比对,但功率终究不如电压来的方便。音量调节框的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会根据每个厂商自行实现,但对上层接口保持一致。

 

 

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

步基

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值