
Warstwa abstrakcji sprzętu (HAL) dźwięku w Androidzie łączy interfejsy API wyższego poziomu, które są specyficzne dla dźwięku i znajdują się w pakiecie android.media, z bazowym sterownikiem dźwięku i sprzętem. Ta sekcja zawiera instrukcje wdrażania i wskazówki dotyczące zwiększania skuteczności.
Architektura dźwięku w Androidzie określa sposób implementacji funkcji audio i wskazuje odpowiedni kod źródłowy związany z tą implementacją.

Rysunek 1. Architektura dźwięku 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 interakcję ze sprzętem audio.
- JNI
-
Kod JNI powiązany z pakietem 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/
iframeworks/base/media/jni
. - Platforma natywna
-
Platforma natywna udostępnia natywny odpowiednik pakietu android.media, wywołując proxy IPC Binder, aby uzyskać dostęp do usług serwera multimediów związanych z dźwiękiem.
Kod platformy natywnej znajduje się w folderze
frameworks/av/media/libmedia
. - Binder IPC
-
Pełnomocnicy IPC Binder 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 interakcję z implementacjami HAL. Serwer multimediów znajduje się w lokalizacji
frameworks/av/services/audioflinger
. - HAL
-
HAL definiuje standardowy interfejs, z którego korzystają usługi audio i który musisz wdrożyć, aby sprzęt audio działał prawidłowo. Więcej informacji znajdziesz w interfejsie HAL audio 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żywać zaawansowanej architektury dźwięku w systemie Linux (ALSA), otwartego systemu dźwięku (OSS) lub niestandardowego sterownika (HAL jest niezależny od sterownika).
Uwaga: jeśli używasz ALSA, zalecamy
external/tinyalsa
w przypadku części sterownika dotyczącej użytkownika ze względu na zgodne licencjonowanie (standardowa biblioteka trybu użytkownika jest licencjonowana na podstawie licencji GPL). - Natywny dźwięk na Androidzie oparty na Open SL ES (nie jest wyświetlany)
- Ten interfejs API jest udostępniany w ramach Android NDK i znajduje się na tym samym poziomie architektury co android.media.