Audio

Symbol für Android Audio HAL

Die Audio-Hardware-Abstraktionsschicht (HAL) von Android verbindet die höherrangigen, audiospezifischen Framework-APIs in android.media mit dem zugrunde liegenden Audiotreiber und der zugrunde liegenden 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

Anwendungsframework
Das Anwendungs-Framework enthält den App-Code, der die android.media APIs zur Interaktion mit der Audiohardware verwendet. Intern ruft dieser Code entsprechende JNI-Bindungsklassen 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 die 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 und 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 Mediaserver enthält Audiodienste, also den 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 ordnungsgemäß 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 Audiotreiber interagiert mit Ihrer Hardware und HAL-Implementierung. Sie können Advanced Linux Sound Architecture (ALSA), Open Sound System (OSS) oder einen benutzerdefinierten Treiber verwenden (HAL ist treiberunabhängig).

Hinweis: Wenn Sie ALSA verwenden, empfehlen wir external/tinyalsa für den Nutzerbereich des Treibers aufgrund der kompatiblen Lizenzierung (die Standard-User-Mode-Bibliothek ist GPL-lizenziert).

Natives Android-Audio basierend auf Open SL ES (nicht dargestellt)
Diese API wird als Teil des Android NDK freigegeben und befindet sich auf derselben Architekturebene wie android.media.