Android音量调节流程

应用通过下面的接口调节音量

audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,

            AudioManager.ADJUST_RAISE,

            AudioManager.FLAG_SHOW_UI);  //调高声音

应用通过调用AudioManager的adjustStreamVolume方法调节音量

AudioService.java - adjustStreamVolume

  1. 音量调大时,若要超过SafeMediaVolume时,系统会弹出对话框给予确认
  2. 需要处理的Message值
  3. 通知上层更新Volume

    Android音量调节流程_第1张图片

    在adjustStreamVolume 中会通过sendMsg的方式来将调节音量的事件加入到消息列队SENDMSG_QUENE中,当轮寻到该Message时,系统会调用handleMessage函数来处理该Message,此时该处对应的Message为MSG_SET_DEVICE_VOLUME。

    可以发现当msg.what =  MSG_SET_DEVICE_VOLUME时,会进到setDeviceVolume函数中,继续往下分析:

    setDeviceVolume

    Android音量调节流程_第2张图片

    applyDeviceVolume_syncVSS

    Android音量调节流程_第3张图片

    setStreamVolumeIndex

    setStreamVolumeIndexAS

    setStreamVolumeIndex是个native方法

    AudioSystem::setStreamVolumeIndex

    setStreamVolumeIndex函数中比较简单,通过StrongPointer来与AudioPolicyService建立联系,将AudioSystem中的setStreamVolumeIndex操作移到aps中完成。aps的实现在AudioPolicyManager.cpp中下面进入到AudioPolicyManager.cpp文件中的setStreamVolumeIndex继续分析:

    AudioPolicyManager::setVolumeIndexForAttributes

    Android音量调节流程_第4张图片

    AudioPolicyManager::checkAndSetVolume

    Android音量调节流程_第5张图片

    AudioPolicyManager::computeVolume

     VolumeCurve::volIndexToDb

    Android音量调节流程_第6张图片

    最后decibles代表某一音节所对应的db值,这样整个音量调节过程到此就算完成了。

 

你可能感兴趣的:(音频)