天天看點

android audio volume

1.     AudioFlinger和AudioPolicyService的啟動是在Main_audioserver中。其啟動流程如下面所示:

android audio volume

2.     Audiotrack輸出音頻到outputdevice的過程

android audio volume

3.     A2DP接入時audio部分的處理流程

android audio volume

4. android audio音量變化主要是在AudioMix混音階段,AudioFlinger::MixerThread::prepareTracks_l裡音量計算如下:

android audio volume

AudioMix設定混音參數:

android audio volume

設定混音器的參數後,mstervolume和typevolume的改變都會導緻混音後資料音量的變化。那麼,所有藍牙相關的音量問題都可以通過追蹤mastervolume和streamtypeVolume的變化找到問題的根源。

(1)streamtypeVolume引起的音量問題

一般藍牙音頻裝置接入後,根據audiopolicy會對各種device以及streamtype音量做出調整,音量調整是通過setStreamVolume設定的,僅僅是設定MixerThread的volume以達到改變音量的目的。其流程圖如下:

android audio volume

(2). masterVolume引起的藍牙A2DP音量問題

masterVolume的設定是在audioflinger在loadHWmodule的時候,根據primary device即TV speaker的HAL中的get_master_volume獲得初始值;其他輸出device比如A2DP的mixerthread在建立的時候,會判斷device HAL是否支援設定mastervolume(canSetMasterVolume),如果可以會初始化masterVolume=1.0.

masterVolume改變的流程圖如下:

android audio volume

繼續閱讀