System operacyjny Android Automotive (AAOS) jest oparty na podstawowym stosie audio Androida i obsługuje przypadki użycia związane z działaniem jako system multimedialny w pojeździe. AAOS odpowiada za dźwięki systemu informacyjno-rozrywkowego (czyli multimedia, nawigacja i komunikacja), ale nie jest bezpośrednio odpowiedzialny za sygnały i ostrzeżenia, które mają ścisłe wymagania dotyczące dostępności i czasu.
AAOS udostępnia sygnały i mechanizmy, które pomagają pojazdowi zarządzać dźwiękiem, ale ostatecznie to pojazd decyduje, jakie dźwięki powinny być odtwarzane dla kierowcy i pasażerów, zapewniając, że dźwięki krytyczne dla bezpieczeństwa i dźwięki wymagane przez przepisy są dobrze słyszalne i nie są przerywane.
AAOS korzysta ze stosu audio Androida, więc aplikacje innych firm odtwarzające dźwięk nie muszą robić niczego innego niż na telefonach. Routing dźwięku w aplikacji jest automatycznie zarządzany przez AAOS zgodnie z opisem w sekcji Konfiguracja zasad dotyczących dźwięku.
Android zarządza multimediami w samochodzie, więc zewnętrzne źródła multimediów, takie jak tuner radiowy, powinny być reprezentowane przez aplikacje, które mogą obsługiwać fokus audio i zdarzenia klawiszy multimedialnych dla danego źródła.
Dźwięki i strumienie danych z Androida
Samochodowe systemy audio obsługują te dźwięki i strumienie:
Rysunek 1. Schemat architektury zorientowanej na strumienie.
Android zarządza dźwiękami pochodzącymi z aplikacji na Androida, kontrolując te aplikacje i kierując ich dźwięki do urządzeń wyjściowych na poziomie HAL w zależności od rodzaju dźwięku:
Strumienie logiczne, które w podstawowej nomenklaturze audio są nazywane źródłami, są oznaczane atrybutami audio.
Strumienie fizyczne, w terminologii podstawowego dźwięku nazywane urządzeniami, po zmiksowaniu nie mają informacji kontekstowych.
Aby zapewnić niezawodność, dźwięki zewnętrzne (pochodzące z niezależnych źródeł, np. sygnały ostrzegawcze pasów bezpieczeństwa) są zarządzane poza Androidem, poniżej warstwy HAL, a nawet w osobnym sprzęcie. Osoby wdrażające system muszą udostępnić mikser, który akceptuje co najmniej 1 strumień dźwięku z Androida, a następnie łączy te strumienie w odpowiedni sposób z zewnętrznymi źródłami dźwięku wymaganymi przez pojazd. Android Control HAL zapewnia inny mechanizm komunikacji z Androidem w przypadku dźwięków generowanych poza Androidem:
- Prośba o aktywność audio
- Ograniczenia wzmocnienia lub głośności
- Zmiany wzmocnienia i głośności
Implementacja HAL audio i zewnętrzny mikser odpowiadają za zapewnienie słyszalności zewnętrznych dźwięków o krytycznym znaczeniu dla bezpieczeństwa oraz za miksowanie strumieni dostarczanych przez Androida i kierowanie ich do odpowiednich głośników.
Dźwięki Androida
Aplikacje mogą mieć co najmniej 1 odtwarzacz, który wchodzi w interakcje za pomocą standardowych interfejsów API Androida (np. AudioManager do sterowania fokusem lub MediaPlayer do przesyłania strumieniowego), aby emitować co najmniej 1 logiczny strumień danych audio. Te dane mogą być mono (1-kanałowe) lub dźwiękiem przestrzennym 7.1, ale są kierowane i traktowane jako pojedyncze źródło. Strumień aplikacji jest powiązany z elementem AudioAttributes, który zawiera wskazówki dla systemu dotyczące sposobu odtwarzania dźwięku.
Strumienie logiczne są wysyłane przez AudioService i kierowane do jednego (i tylko jednego) z dostępnych fizycznych strumieni wyjściowych, z których każdy jest wyjściem miksera w AudioFlinger. Po zmiksowaniu atrybutów audio do strumienia fizycznego nie są one już dostępne.
Każdy strumień fizyczny jest następnie przesyłany do interfejsu HAL audio w celu renderowania na sprzęcie. W przypadku aplikacji samochodowych sprzęt do renderowania może być lokalnymi kodekami (podobnie jak w przypadku urządzeń mobilnych) lub zdalnym procesorem w sieci fizycznej pojazdu. W każdym przypadku to implementacja HAL dźwięku dostarcza rzeczywiste dane próbki i sprawia, że stają się one słyszalne.
Strumienie zewnętrzne
Strumienie dźwięku, które nie powinny być kierowane przez Androida (ze względu na certyfikację lub synchronizację), mogą być wysyłane bezpośrednio do zewnętrznego miksera. Od Androida 11 HAL może żądać ostrości dla tych dźwięków zewnętrznych, aby informować Androida o konieczności podjęcia odpowiednich działań, takich jak wstrzymanie odtwarzania multimediów lub uniemożliwienie innym aplikacjom uzyskania ostrości.
Jeśli strumienie zewnętrzne są źródłami multimediów, które powinny wchodzić w interakcje z generowanym przez Androida środowiskiem dźwiękowym (np. zatrzymywać odtwarzanie plików MP3 po włączeniu zewnętrznego tunera), powinny być reprezentowane przez aplikację na Androida. Taka aplikacja będzie żądać skupienia dźwięku w imieniu źródła multimediów zamiast HAL i będzie reagować na powiadomienia o skupieniu, uruchamiając i zatrzymując zewnętrzne źródło w razie potrzeby, aby dostosować się do zasad skupienia Androida.
Aplikacja jest też odpowiedzialna za obsługę zdarzeń klawiszy multimedialnych, takich jak odtwarzanie i wstrzymywanie. Jednym z sugerowanych mechanizmów sterowania takimi urządzeniami zewnętrznymi jest HwAudioSource. Więcej informacji znajdziesz w artykule Podłączanie urządzenia wejściowego w AAOS.
Urządzenia wyjściowe
Na poziomie Audio HAL typ urządzenia AUDIO_DEVICE_OUT_BUS zapewnia ogólne urządzenie wyjściowe do użytku w samochodowych systemach audio. Urządzenie magistrali obsługuje porty adresowalne (gdzie każdy port jest punktem końcowym strumienia fizycznego) i powinno być jedynym obsługiwanym typem urządzenia wyjściowego w pojeździe.
Implementacja systemu może używać jednego portu magistrali dla wszystkich dźwięków Androida. W takim przypadku Android miksuje wszystko i przesyła jako jeden strumień. Alternatywnie HAL może udostępniać 1 port magistrali dla każdego CarAudioContext, aby umożliwić jednoczesne dostarczanie dowolnego typu dźwięku. Dzięki temu implementacja HAL może miksować i wygłuszać różne dźwięki w dowolny sposób.
Przypisanie kontekstów audio do urządzeń wyjściowych odbywa się za pomocą pliku car_audio_configuration.xml. Więcej informacji znajdziesz w artykule Konfigurowanie zasad dotyczących dźwięku.