音訊

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 中。
Binder IPC
Binder IPC 代理程式可協助處理序間通訊。代理程式位於 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 授權)。

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