Audio

Ikona HAL dźwięku na Androida

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ę.

Architektura dźwięku

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/frameworks/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.