Android音量设置流程干货版
来源:互联网 发布:电脑办公软件培训班 编辑:程序博客网 时间:2024/06/06 05:37
原址
1. 音量级数定义
在AudioService.Java中定义了最大音量MAX_STREAM_VOLUME,手机的设置property可以覆盖它。
2. 音量初始化
initStreamVolume传入AudioPolicyManagerBase里的StreamDescriptor mStreams[AudioSystem::NUM_STREAM_TYPES];
3. 设置主音量
主音量怎么起作用?
最终音量=主音量*流音量
4. 设置流音量
setStreamVolumeIndex函数,在AudioPolicy中,通过volIndexToAmpl把Index整数转为float型的振幅比,也就是“振幅/参考振幅”。
具体做法是:通过输入的index查表找到对应的声压值db,然后通过下面的公式算出amplifier,这个值就是振幅比。
函数volIndexToAmpl中有一行代码
float amplification = exp( decibels * 0.115129f);
就是这个公式。
通过这个值乘以音源的振幅,就得到了调节后的音量。这也是数字增益调节的原理。
拿到这个值后,存入AudioFlinger的全局变量mStreamTypes,即:mStreamTypes[stream].volume =value。
在Thread试图播放声音时,在prepareTracks_l中是这么做的(AudioFlinger::PlaybackThread::mixer_state AudioFlinger::MixerThread::prepareTracks_l(
Vector< sp<Track> > *tracksToRemove)):
在系统静音时,只是很简单的设置下列参数为0:
vl = VR = 0;vlf = vrf = vaf = 0.
设置AudioMixer的参数
mAudioMixer->setParameter(name, param,AudioMixer::VOLUME0, &vlf);
mAudioMixer->setParameter(name, param,AudioMixer::VOLUME1, &vrf);
所以最后还是通过AudioMixer真正去乘以VOLUME0和VOLUME1来设置音量。
如track__16BitsStereo中
- Android音量设置流程干货版
- Android音量设置流程干货版
- Android Audio音量设置流程
- android Audio设置音量流程及其binder通讯原理
- android Audio设置音量流程及其binder通讯原理
- android设置中拖动音量条调节音量流程(android5.1)
- Android 4.4音量键控制音量流程
- android设置音量
- android 音量设置条
- android 系统音量设置
- Android设置手机音量
- android 设置最大音量
- android 系统音量设置
- android 音量控制 流程梳理
- android 音量控制 流程梳理
- Android 音量控制流程分析
- android audio音量控制流程
- android5.0设置模块音量调节流程
- vuejs cli安装
- mongo的使用
- solr联合多个字段进行检索(multivalued和copyfield的使用)
- 用Python调用C++/C函数
- cookie与session对比(JavaBean)
- Android音量设置流程干货版
- phpcms 用phpexcel导入导出excel
- 配置Log4J
- 【2】施密特(Schimidt)正交化与正交匹配追踪
- CommOperateWriteRedis().delkey(mconn_relate,vid)
- QT使用记录关于调用DLL库文件出现的问题
- FastQC 质控软件的下载及使用方法(一)
- Netty线程模型
- 【C#】关于c#中委托的解释