Audio

Icona Android Audio HAL

L'Hardware Abstraction Layer (HAL) audio di Android collega le API di framework specifiche per l'audio di livello superiore in android.media al driver e all'hardware audio sottostanti. Questa sezione include istruzioni per l'implementazione e suggerimenti per migliorare le prestazioni.

L'architettura audio di Android definisce in che modo viene implementata la funzionalità audio e fa riferimento al codice sorgente pertinente coinvolto nell'implementazione.

Architettura audio

Figura 1. Architettura audio Android

Framework per le applicazioni
Il framework dell'applicazione include il codice dell'app, che utilizza le API android.media per interagire con l'hardware audio. All'interno, questo codice chiama le classi di JNI glue corrispondente per accedere al codice nativo che interagisce con l'hardware audio.
JNI
Il codice JNI associato ad android.media chiama il codice nativo di livello inferiore per accedere all'hardware audio. JNI si trova in frameworks/base/core/jni/ e frameworks/base/media/jni.
Framework nativo
Il framework nativo fornisce un equivalente nativo al pacchetto android.media, chiamando i proxy IPC di Binder per accedere ai servizi audio specifici del media server. Il codice del framework nativo si trova in frameworks/av/media/libmedia.
Binder IPC
I proxy IPC di Binder facilitano la comunicazione oltre i confini dei processi. I proxy si trovano in frameworks/av/media/libmedia e iniziano con la lettera "I".
Server multimediale
Il media server contiene i servizi audio, ovvero il codice effettivo che interagisce con le implementazioni HAL. Il server multimediale si trova in frameworks/av/services/audioflinger.
HAL
L'HAL definisce l'interfaccia standard chiamata dai servizi audio e che devi implementare affinché l'hardware audio funzioni correttamente. Per ulteriori dettagli, consulta l'interfaccia HAL audio e i commenti nei file *.hal della directory della versione HAL corrispondente.
Driver del kernel
Il driver audio interagisce con l'hardware e l'implementazione HAL. Puoi utilizzare Advanced Linux Sound Architecture (ALSA), Open Sound System (OSS) o un driver personalizzato (HAL è indipendente dal driver).

Nota: se utilizzi ALSA, ti consigliamo di usare external/tinyalsa per la parte utente del driver a causa delle licenze compatibili (la libreria in modalità utente standard è in licenza GPL).

Audio nativo Android basato su Open SL ES (non mostrato)
Questa API è esposta nell'ambito di Android NDK ed è allo stesso livello di architettura di android.media.