Dźwięk

Ikona Android Audio HAL

Warstwa abstrakcji sprzętowej (HAL) audio w Androidzie łączy interfejsy API platformy wyższego poziomu, które są specyficzne dla dźwięku i znajdują się w android.media, z podstawowym sterownikiem audio i sprzętem. W tej sekcji znajdziesz instrukcje dotyczące implementacji i wskazówki, które pomogą Ci zwiększyć wydajność.

Architektura audio w Androidzie określa, jak zaimplementowano funkcje audio, i wskazuje odpowiedni kod źródłowy związany z implementacją.

Architektura audio

Rysunek 1. Architektura audio w Androidzie

Platforma aplikacji
Platforma aplikacji zawiera kod aplikacji, który korzysta z interfejsów API android.media do interakcji ze sprzętem audio. Wewnętrznie ten kod wywołuje odpowiednie klasy JNI, aby uzyskać dostęp do kodu natywnego, który wchodzi w interakcje ze sprzętem audio.
JNI
Kod JNI powiązany z android.media wywołuje kod natywny niższego poziomu, aby uzyskać dostęp do sprzętu audio. JNI znajduje się w frameworks/base/core/jni/ i frameworks/base/media/jni.
Platforma natywna
Platforma natywna zapewnia natywny odpowiednik pakietu android.media, wywołując serwery proxy Binder IPC, aby uzyskać dostęp do usług specyficznych dla dźwięku na serwerze multimediów. Kod platformy natywnej znajduje się w frameworks/av/media/libmedia.
Binder IPC
Serwery proxy Binder IPC ułatwiają komunikację między procesami. Serwery proxy znajdują się w frameworks/av/media/libmedia i zaczynają się od litery „I”.
Serwer mediów
Serwer multimediów zawiera usługi audio, czyli rzeczywisty kod, który wchodzi w interakcje z implementacjami HAL. Serwer multimediów znajduje się w frameworks/av/services/audioflinger.
HAL
HAL definiuje standardowy interfejs, do którego wywołują usługi audio i który musisz zaimplementować, aby sprzęt audio działał prawidłowo. Więcej informacji znajdziesz w interfejsie audio HAL i komentarzach w plikach *.hal w odpowiednim katalogu wersji HAL.
Sterownik jądra
Sterownik audio wchodzi w interakcje ze sprzętem i implementacją HAL. Możesz użyć zaawansowanej architektury dźwięku w systemie Linux (ALSA), otwartego systemu dźwięku (OSS) lub sterownika niestandardowego (HAL jest niezależny od sterownika).

Uwaga: jeśli używasz ALSA, zalecamy external/tinyalsa w przypadku części sterownika użytkownika ze względu na zgodne licencjonowanie (standardowa biblioteka w trybie użytkownika jest licencjonowana na licencji GPL).

Natywne audio w Androidzie oparte na Open SL ES (nie jest widoczne)
Ten interfejs API jest udostępniany jako część Android NDK i znajduje się na tym samym poziomie architektury co android.media.