當前位置:編程學習大全網 - 源碼下載 - Android Audio簡述

Android Audio簡述

audio是Android系統是比較重要的壹個模塊,本人也涉足時間不是很長,經驗還是很少的,只是把自己在工作中所遇到的問題記錄。

Audio 即音頻, 也就是控制著手機中的各種聲音的輸出,比如說,音樂的播放,音量大小,按鍵音,插入耳機,聲音從耳機播放,連接藍牙,聲音從藍牙耳機中播放。還有壹些HiFi播放, offload播放,高清播放。

常見的問題如下:

POP音,漏音,聲音卡頓,耳機無法識別,還有壹些音頻通路等問題,還有壹些穩定性的問題如:ANR、CRASH、tombstone。還有壹些安全漏洞的問題(主要是核心庫那裏)。

回歸正題

-------華麗的分割線-------

audio分為? 應用層,fwk層,native fwk, hal層。

常見的文件有MediaPlayer.java、 AudioSystem.java、 AudioService.java、AudioManager.java 文件路徑(framework/base/media)

AudioFlinger.cpp、AudioTrack.cpp、 AudioPolicyManager.cpp、 Threads.cpp、Tracks.cpp、 Engine.cpp、 Audiosystem.cpp? 文件路徑(framework/av)

audio_hw.c? 文件路徑(vendor/)

java文件我在這裏就不過多的說了,沒啥好講的,主要說壹下c++文件吧。

AudioFlinger 是音頻策略的執行者, AudioPolicyManager是制作音頻策略的,AudioTrack是負責播放從上層傳過來的PCM數據,簡單的說就是負責播放的。?

audio_hw 是每個HAL層的文件,每個手機廠商自己定制的文件。當然Google也有。

壹般呢,我們處理音頻相關的問題呢,有壹些特定的套路,需要AP 側的log, 有時還需要kernel 的log,? 當然最主要的是需要音頻數據。也就是出現問題時,的聲音數據,讓我們可以快速的定位出現問題的位置。

簡單的說下播放壹首歌曲的流程:(以Android O 為例)

上層創建壹個MediaPlayer對象,然後調用NuPlayer框架(播放器),NuPlayer先將當前歌曲的文件信息讀取,采樣率,比特率,等之類的東西。然後開始調用audio decoder (音頻解碼器)? 將解碼出來的PCM數據傳給AudioTrack,? Audiotrack 會創建壹個Track,(每壹個播放都會創建壹個屬於自己的track,不用了就銷毀,最多可以同時創建32個),經過AudioFlinger重采樣之後,送到HAL層,HAL層在經過壹些混音,降噪之類的處理,將聲音送到Codec,然後送給硬件輸出,進行播放。

這個是壹個大概的播放流程,如果我們在播放過程中遇到了壹些問題,比如說是fwk層的問題,我們就在AudioTrack與AudioFlinger之間尋問題的原因。

比如說,播放無聲,我們需要看AudioPolicyManager中的壹些策略是不是將當前的track給mute了。或者是壹些其他的原因等。

這裏只是簡單的介紹下Audio,Audio算是壹個較為復雜的模塊,還需要好好的研究。

  • 上一篇:激光焊接質量可以用什麽指標來衡量
  • 下一篇:哪些人不能吃冬蟲夏草
  • copyright 2024編程學習大全網