Audio 相關程式碼分析

來源:互聯網
上載者:User
一、Audio系統綜述     Audio系統主要分成如下幾個層次:    (1)media庫提供的Audio系統的上層介面;
    (2)AudioFlinger作為Audio系統的中介層;
    (3)Audio的硬體抽象層提供底層支援;
    (4)Audio介面通過JNI和Java架構提供給上層。     Audio系統的各個層次介面主要提供了兩方面功能:放音(Track)和錄音(Recorder)。
    在Android的Audio系統中,無論上層還是下層,都使用一個管理類和輸出輸入兩個類來表示整個Audio    系統,輸出輸入兩個類負責資料通道。 二、Audio架構分析     1、Audio的Java部分
       代碼路徑:frameworks/base/media/java/android/media
       與Audio相關的Java包是android.media,主要包含AudioManager和Audio系統的幾個類。     2、Audio的JNI部分
       代碼路徑:frameworks/base/core/jni
       產生庫libandroid_runtime.so,Audio的JNI是其中的一個部分。     3、Audio的架構部分
       標頭檔路徑:frameworks/base/include/media/
       原始碼路徑:frameworks/base/media/libmedia/       Audio本地架構是media庫的一部分,本部分內容被編譯成庫libmedia.so,
       提供Audio部分的介面(包括基於Binder的IPC機制)。
    
       Audio系統的核心架構在media庫中提供,對上面主要實現AudioSystem、AudioTrack和        AudioRecorder三個類。提供了IAudioFlinger類介面,在這個類中,可以獲得IAudioTrack和       IAudioRecorder兩個介面,分別用於聲音的播放和錄製。AudioTrack和 AudioRecorder分別通       過調用IAudioTrack和IAudioRecorder來實現。        Audio系統的標頭檔在frameworks/base/include/media/目錄中,主要的標頭檔如下:
          AudioSystem.h:media庫的Audio部分對上層的總管介面;
          IAudioFlinger.h:需要下層實現的總管介面;
          AudioTrack.h:放音部分對上介面;
          IAudioTrack.h:放音部分需要下層實現的介面;
          AudioRecorder.h:錄音部分對上介面;
          IAudioRecorder.h:錄音部分需要下層實現的介面。        IaudioFlinger.h、 IAudioTrack.h和IAudioRecorder.h這三個介面通過下層的繼承來實現       (即AudioFlinger)。AudioFlinger.h、AudioTrack.h和AudioRecorder.h是對上層提供的       介面,它們既供本地程式調用(例如聲音的播放器、錄製器等),也可以通過JNI向Java層提供接       口。     4、Audio Flinger
       代碼路徑:frameworks/base/libs/audioflinger       這部分內容被編譯成庫libaudioflinger.so,它是Audio系統的本地服務部分。          AudioFlinger是Audio系統的中介層,在系統中起到服務作用,它主要作為libmedia提供的       Audio部分介面的實現。AudioFlinger的核心檔案是AudioFlinger.h和AudioFlinger.cpp,提       供了類AudioFlinger,這個類是一個IAudioFlinger的實現。AudioFlinger主要提供       createTrack()建立音訊輸出裝置IAudioTrack,openRecord()建立音訊輸入裝置       IAudioRecord。另外包含的就是一個get/set介面,用於控制。       從工作的角度看,AudioFlinger在初始化之後,首先獲得放音裝置,然後為混音器(Mixer)建立       線程,接著建立放音裝置線程,線上程中獲得放音裝置。    5、Audio的硬體抽象層介面
       標頭檔路徑:hardware/libhardware_legacy/include/hardware/
       其中主要的檔案為:AudioHardwareBase.h和AudioHardwareInterface.h。        Audio硬體抽象層的實現在各個系統中可能是不同的,需要使用代碼去繼承相應的類並實現它們,作       為Android系統本地架構層和驅動程式介面。Audio的硬體抽象層是AudioFlinger和Audio硬體的       介面,在各個系統的移植過程中可以有不同的實現方式。Audio硬體抽象層可以基於Linux標準的       ALSA或OSS音頻驅動實現,也可以基於私人的Audio驅動介面來實現。       在AudioHardwareInterface.h中定義了類:AudioStreamOut、AudioStreamIn和       AudioHardwareInterface。       在這個AudioHardwareInterface介面中,使用openOutputStream()和openInputStream()函       數分別擷取AudioStreamOut和AudioStreamIn兩個類,它們作為音頻輸入/輸出裝置來使用。此       外,AudioHardwareInterface.h定義了C語言的介面來擷取一個AudioHardware Interface類       型的指標。
           extern "C" AudioHardwareInterface* createAudioHardware(void);             如果實現一個 Android的硬體抽象層,則需要實現AudioHardwareInterface、       AudioStream Out和AudioStreamIn三個類,將代碼編譯成動態庫libauido.so。       AudioFlinger會串連這個動態庫,並調用其中的createAudioHardware() 函數來擷取介面。 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.