音訊

Android Audio HAL 圖示

Android 的音訊硬體抽象層 (HAL) 會將 android.media 中較高層級的音訊專用架構 API,連結至底層的音訊驅動程式和硬體。本節包含導入說明和提升成效的訣竅。

Android 音訊架構定義了音訊功能的實作方式,並指向實作過程中涉及的相關原始碼。

音訊架構

圖 1. Android 音訊架構

應用程式架構
應用程式架構包含應用程式程式碼,這些程式碼會使用 android.media API 與音訊硬體互動。在內部,這段程式碼會呼叫對應的 JNI 黏著類別,存取與音訊硬體互動的原生程式碼。
JNI
android.media 相關聯的 JNI 程式碼會呼叫較低層級的原生程式碼,以存取音訊硬體。JNI 位於 frameworks/base/core/jni/frameworks/base/media/jni
原生架構
原生架構提供 android.media 套件的對等原生項目,呼叫 Binder IPC 代理程式來存取媒體伺服器的音訊專屬服務。原生架構程式碼位於 frameworks/av/media/libmedia
繫結器 IPC
Binder IPC Proxy 可促進跨程序界線的通訊。Proxy 位於 frameworks/av/media/libmedia,且開頭為字母「I」。
媒體伺服器
媒體伺服器包含音訊服務,這些服務是與 HAL 實作項目互動的實際程式碼。媒體伺服器位於 frameworks/av/services/audioflinger
HAL
HAL 定義音訊服務呼叫的標準介面,您必須實作這個介面,音訊硬體才能正常運作。詳情請參閱音訊 HAL 介面,以及對應 HAL 版本目錄的 *.hal 檔案中的註解。
核心驅動程式
音訊驅動程式會與硬體和 HAL 實作項目互動。您可以使用 Advanced Linux Sound Architecture (ALSA)、Open Sound System (OSS) 或自訂驅動程式 (HAL 與驅動程式無關)。

注意:如果您使用 ALSA,建議您為驅動程式的使用者部分採用 external/tinyalsa,因為其授權相容 (標準使用者模式程式庫採用 GPL 授權)。

以 Open SL ES 為基礎的 Android 原生音訊 (未顯示)
這個 API 會以 Android NDK 的一部分公開, 與 android.media 位於相同的架構層級。