Audio

Symbol für Android Audio HAL

Die Audio-Hardware-Abstraktionsschicht (Hardware Abstraction Layer, HAL) von Android verbindet die Audio-Framework-APIs auf höherer Ebene in android.media mit dem zugrunde liegenden Audiotreiber und der Hardware. Dieser Abschnitt enthält Implementierungsanleitungen und Tipps zur Leistungssteigerung.

Die Android-Audioarchitektur definiert, wie Audiofunktionen implementiert werden, und verweist auf den relevanten Quellcode, der an der Implementierung beteiligt ist.

Audioarchitektur

Abbildung 1: Android-Audioarchitektur

Anwendungs-Framework
Das Anwendungs-Framework enthält den App-Code, der die android.media-APIs verwendet, um mit der Audiohardware zu interagieren. Intern ruft dieser Code entsprechende JNI-Glue-Klassen auf, um auf den nativen Code zuzugreifen, der mit der Audiohardware interagiert.
JNI
Der JNI-Code, der mit android.media verknüpft ist, ruft nativen Code auf niedrigerer Ebene auf, um auf Audiohardware zuzugreifen. JNI befindet sich in frameworks/base/core/jni/ und frameworks/base/media/jni.
Natives Framework
Das native Framework bietet ein natives Äquivalent zum Paket android.media. Es ruft Binder-IPC-Proxys auf, um auf die audiospezifischen Dienste des Mediaservers zuzugreifen. Der native Framework-Code befindet sich in frameworks/av/media/libmedia.
Binder-IPC
Binder-IPC-Proxys erleichtern die Kommunikation über Prozessgrenzen hinweg. Proxys befinden sich in frameworks/av/media/libmedia und beginnen mit dem Buchstaben „I“.
Mediaserver
Der Media-Server enthält Audiodienste, also den eigentlichen Code, der mit Ihren HAL-Implementierungen interagiert. Der Mediaserver befindet sich unter frameworks/av/services/audioflinger.
HAL
Die HAL definiert die Standardschnittstelle, die von Audiodiensten aufgerufen wird und die Sie implementieren müssen, damit Ihre Audiohardware richtig funktioniert. Weitere Informationen finden Sie in der Audio-HAL-Schnittstelle und in den Kommentaren in den *.hal-Dateien des entsprechenden HAL-Versionsverzeichnisses.
Kernel-Treiber
Der Audio-Treiber interagiert mit Ihrer Hardware und HAL-Implementierung. Sie können ALSA (Advanced Linux Sound Architecture), OSS (Open Sound System) oder einen benutzerdefinierten Treiber verwenden (HAL ist treiberunabhängig).

Hinweis: Wenn Sie ALSA verwenden, empfehlen wir external/tinyalsa für den Nutzerteil des Treibers, da die Lizenz kompatibel ist (die Standardbibliothek im Nutzermodus ist GPL-lizenziert).

Systemeigenes Android-Audio basierend auf OpenSL ES (nicht dargestellt)
Diese API ist Teil des Android NDK und befindet sich auf derselben Architekturstufe wie android.media.