Warstwa abstrakcji sprzętu audio (HAL) systemu Android łączy interfejsy API wyższego poziomu specyficzne dla dźwięku w witrynie android.media z podstawowym sterownikiem audio i sprzętem. Ta sekcja zawiera instrukcje dotyczące implementacji i wskazówki dotyczące poprawy wydajności.
Architektura audio Androida definiuje sposób implementacji funkcjonalności audio i wskazuje odpowiedni kod źródłowy zaangażowany w implementację.
- Ramy aplikacji
- Struktura aplikacji zawiera kod aplikacji, który wykorzystuje interfejsy API systemu Android.media do interakcji ze sprzętem audio. Wewnętrznie ten kod wywołuje odpowiednie klasy kleju JNI, aby uzyskać dostęp do kodu natywnego, który współdziała ze sprzętem audio.
- JNI
- Kod JNI powiązany z android.media wywołuje kod natywny niższego poziomu w celu uzyskania dostępu do sprzętu audio. JNI znajduje się w
frameworks/base/core/jni/
iframeworks/base/media/jni
. - Natywny framework
- Natywna struktura zapewnia natywny odpowiednik pakietu android.media , wywołujący serwery proxy Binder IPC w celu uzyskania dostępu do usług specyficznych dla dźwięku na serwerze multimediów. Natywny kod frameworka znajduje się w
frameworks/av/media/libmedia
. - Spoiwo IPC
- Serwery proxy Binder IPC ułatwiają komunikację ponad granicami procesów. Serwery proxy znajdują się w
frameworks/av/media/libmedia
i zaczynają się na literę „I”. - Serwer mediów
- Serwer multimediów zawiera usługi audio, które są rzeczywistym kodem współdziałającym z implementacjami HAL. Serwer multimediów znajduje się w
frameworks/av/services/audioflinger
. - HAL
- HAL definiuje standardowy interfejs, z którego korzystają usługi audio i który należy zaimplementować, aby sprzęt audio działał poprawnie. Więcej szczegółów można znaleźć w interfejsie audio HAL i komentarzach w plikach
*.hal
odpowiedniego katalogu wersji HAL. - Sterownik jądra
- Sterownik audio współdziała ze sprzętem i implementacją HAL. Można użyć zaawansowanej architektury dźwięku Linux (ALSA), otwartego systemu dźwiękowego (OSS) lub sterownika niestandardowego (HAL jest niezależny od sterownika).
Uwaga : jeśli używasz ALSA, zalecamy
external/tinyalsa
jako część sterownika dla użytkownika ze względu na kompatybilną licencję (standardowa biblioteka trybu użytkownika jest objęta licencją GPL). - Natywny dźwięk dla Androida oparty na Open SL ES (nie pokazano)
- Ten interfejs API jest udostępniany jako część Android NDK i ma ten sam poziom architektury co android.media .