Audio

Android Audio HAL-Symbol

Der Audio Hardware Abstraction Layer (HAL) von Android verbindet die audiospezifischen Framework-APIs auf höherer Ebene in android.media mit dem zugrunde liegenden Audiotreiber und der Hardware. Dieser Abschnitt enthält Implementierungsanweisungen und Tipps zur Verbesserung der Leistung.

Die Android-Audioarchitektur definiert, wie die Audiofunktionalität implementiert wird, und verweist auf den relevanten Quellcode, der an der Implementierung beteiligt ist.

Audioarchitektur

Abbildung 1. Android-Audioarchitektur

Anwendungsrahmen
Das Anwendungsframework umfasst den App-Code, der die android.media- APIs verwendet, um mit Audio-Hardware zu interagieren. Intern ruft dieser Code entsprechende JNI-Glue-Klassen auf, um auf den nativen Code zuzugreifen, der mit der Audio-Hardware interagiert.
JNI
Der mit android.media verknüpfte JNI-Code ruft nativen Code auf niedrigerer Ebene auf, um auf Audio-Hardware zuzugreifen. JNI befindet sich in frameworks/base/core/jni/ und frameworks/base/media/jni .
Natives Framework
Das native Framework stellt ein natives Äquivalent zum Paket android.media bereit und ruft Binder-IPC-Proxys auf, um auf die audiospezifischen Dienste des Medienservers 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“.
Medienserver
Der Medienserver enthält Audiodienste, bei denen es sich um den eigentlichen Code handelt, der mit Ihren HAL-Implementierungen interagiert. Der Medienserver befindet sich unter frameworks/av/services/audioflinger .
HAL
Die HAL definiert die Standardschnittstelle, die Audiodienste aufrufen und die Sie implementieren müssen, damit Ihre Audio-Hardware ordnungsgemäß funktioniert. Weitere Einzelheiten 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 (HAL ist treiberunabhängig) verwenden.

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

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