
Warstwę abstrakcji sprzętu do odtwarzania dźwięku (HAL) w Androidzie łączy interfejsy API frameworku dotyczące dźwięku na wyższym poziomie w android.media z podstawowym sterownikiem dźwięku i sprzętem. Ta sekcja zawiera instrukcje implementacji i wskazówki dotyczące poprawy skuteczności.
Architektura audio na Androidzie określa sposób implementacji funkcji audio i wskazuje odpowiedni kod źródłowy zaangażowany w implementację.

Rysunek 1. Architektura audio w Androidzie
- Platforma aplikacji
- Platforma aplikacji zawiera kod aplikacji, który korzysta z interfejsów API android.media do interakcji z sprzętem audio. Wewnętrznie ten kod wywołuje odpowiednie klasy łączące JNI, aby uzyskać dostęp do kodu natywnego, który współpracuje 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/
iframeworks/base/media/jni
. - Platforma natywna
- Natywna platforma zapewnia natywną wersję pakietu android.media, wywołując pośredniki IPC Binder, aby uzyskać dostęp do usług związanych z dźwiękiem na serwerze multimediów.
Kod natywnego frameworka znajduje się w folderze
frameworks/av/media/libmedia
. - Binder IPC
-
Pośrednicy IPC Binder ułatwiają komunikację między procesami. Adresy proxy znajdują się w
frameworks/av/media/libmedia
i rozpoczynają się od litery „I”. - Serwer mediów
-
Serwer multimediów zawiera usługi audio, czyli kod, który współpracuje z implementacjami HAL. Serwer multimediów znajduje się w
frameworks/av/services/audioflinger
. - HAL
-
HAL definiuje standardowy interfejs, który jest wywoływany przez usługi audio i musisz go zaimplementować, aby sprzęt audio działał prawidłowo. Więcej informacji znajdziesz w interfejsie HAL dźwięku oraz w komentarzach w plikach
*.hal
w odpowiednim katalogu wersji HAL. - Sterownik jądra
-
sterownik audio współpracuje ze sprzętem i implementacją HAL; Możesz użyć Advanced Linux Sound Architecture (ALSA), Open Sound System (OSS) lub niestandardowego sterownika (HAL jest niezależny od sterownika).
Uwaga: jeśli używasz ALSA, zalecamy użycie
external/tinyalsa
w części sterownika przeznaczonej dla użytkownika ze względu na zgodność licencji (standardowa biblioteka w trybie użytkownika jest objęta licencją GPL). - Natywne dźwięki na Androidzie oparte na Open SL ES (nie pokazano)
- Ten interfejs API jest udostępniany w ramach Android NDK i znajduje się na tym samym poziomie architektury co android.media.