1. 程式人生 > >android音量控制曲線和呼叫過程

android音量控制曲線和呼叫過程

http://blog.csdn.net/newtonnl/article/details/8455136

Android音訊曲線呼叫從ui介面往下設定,根據stream音訊有不同的UI,分為7步,15步,對應到實際的100步。這個轉換過程可以參考AudioPolicyManagerBase.cpp中的volIndexToAmpl函式。

4.1上呼叫流程與之前的有所不同,原理還是一樣的。之前的版本我看是直線型的,新的是3段折線的。為什麼是直線,人耳對聲音大小的感知程度並不是線性的,而是呈對數關係。這個可以和android原理對應起來

 以10為底的對數。

下面是分貝公式的推導過程

 

音訊當中db用加減表示調整音量大小。

目前採用3段折線,我覺得可以更方便的調整聲音在不同區域的變化大小。最低聲音和最高聲音應該需要從更底層驅動來調整。

volIndexToAmpl這個函式實現了上面的轉換關係。

該函式是通過響應音量鍵效益開始執行下面呼叫過程,完成音量大小調節的。

下面是音量鍵按下後的呼叫過程

Audiomanager.java

handleKeyDown

adjustSuggestStreamVolume

 service. adjustSuggestStreamVolume

AudioService.java

adjustSuggestStreamVolume

adjustStreamVolum

sendMSG(mAudioHandler,MSG_SET_DEVICE_VOLUME,SND_QUEUE,device,0,streamstate,0);

訊息機制

AudioService.java

AudioHandler

handleMessage

setDeviceVolume

StreamState.applyDeviceVolume

audioSystem.setStreamVolumeIndex

JNI機制

Android_media_AudioSystem.cpp

AudioPolicyManagerBase.cpp

setStreamVolumeIndex

checkAndSetVolume

computeVolume

volIndexToAmpl

4.0之前版本可以參考