整個android平臺的音頻框架圖如下,
APP
音樂播放器,錄音,音效設置,電話,聲音設置,視頻播放器等使用聲音的軟件。
Framework
MediaPlayer和MediaRecorder,AudioTrack和AudioRecorder,提供聲音播放和錄製。MediaPlayer/MediaRecorder功能更強大,也更易於使用。
AudioManager、AudioService及AudioSystem等類提供聲音控制、通道選擇、音效設置等功能。
這一層主要是橋接功能,封裝native層提供的服務。
Native
AudioTrack、AudioRecorder、MediaPlayer、MediaRecorder、AudioSystem對應java層的相關類,代碼放置在frameworks/av/media/libmedia中, C++語言編寫,編譯後成爲libmedia庫。
AudioFlinger和AudioPolicyService是核心代碼,它們的代碼在frameworks/av/services/audioflinger,編譯後成爲libaudioflinger庫,運行在AudioServer系統進程。
MediaPlayerService也是系統服務,提供音視頻的播放功能,它的代碼位置在frameworks/av/media/libmediaplayerservice。
HAL
HAL是AudioFlinger向下訪問的對象,廠商會在這一層實現自己的接口層,橋接硬件驅動和上層框架,形成的文件會編譯成audio.primary.*,audio.a2dp.*等so庫文件供音頻模塊加載。