1. 程式人生 > >Android音訊系統框架簡述

Android音訊系統框架簡述

情景1:音效卡驅動比較複雜,提供一個lib層對驅動進行封裝,APP調驅動.。框圖如下:
情景1
情景2:廠家對音效卡的配置更瞭解,設定的引數在HAL層,HAL呼叫lib,傳入不同引數,提供給APP.框圖如下:
情景2
情景3:
如果多個APP播放聲音,把聲音合成播放,則多了AudioFlinger層。
情景3
AudioFlinger的作用兩個:
1)接受多個APP資料,合併下發
2)合併下發
情景4:
使用手機時:
1)接上耳機,則用耳機
2)如果接上藍芽,則用藍芽
3)如果都沒有,則用自帶喇叭
誰決定如何選擇裝置?
AudioPolicy層。
情景5:
APP1和APP2和AudioFlinger都是程序,則APP1和APP2無法呼叫AudioFlinger中的服務,可以通過Binder實現跨程序通訊,AudioTrack來封裝訪問,也就是APP通過AudioTrack來訪問AudioFlinger服務。
Audio Track是C++實現的,則APP是要用C++實現。
情景5

情景6:
如果APP是java實現的,則使用JAVA實現的Audio Track。Android的整體框架如下:
情景6

Android的整體框架

如果應用層是JAVA寫的,會同樣使用JAVA寫的AudioTrack,JAVA實現的AudioTrack是對C++編寫的AudioTrack的直接引用,AudioTrack會跨程序使用AudioFlinger提供的服務,把應用程式的資料傳送給Audioflinger,AudioFlinger合成各個應用層的資料,然後把這些資料,通過廠家封裝的HAL層檔案,來呼叫tinyalsa,最終把這些資料傳送給驅動,通過驅動把資料傳送給硬體。

android整體框架