System operacyjny Android Automotive (AAOS) opiera się na podstawowym pakiecie audio Androida, aby obsługiwać przypadki użycia w ramach systemu multimedialno-rozrywkowego w samochodzie. AAOS jest odpowiedzialny za dźwięki systemu informacyjno-rozrywkowego (czyli dźwięki związane z multimediami, nawigacją i komunikacją), ale nie ponosi bezpośredniej odpowiedzialności za sygnały dźwiękowe i ostrzeżenia, które mają ścisłe wymagania dotyczące dostępności i czasu.
Chociaż AAOS udostępnia sygnały i mechanizmy, które pomagają pojazdowi zarządzać dźwiękiem, to ostatecznie to pojazd decyduje, jakie dźwięki powinny być odtwarzane dla kierowcy i pasażerów, aby zapewnić, że dźwięki związane z bezpieczeństwem i dźwięki regulacyjne będą słyszalne bez zakłóceń.
Ponieważ AAOS korzysta z kompletnego pakietu audio Androida, aplikacje innych firm odtwarzające dźwięk nie muszą robić niczego innego niż na telefonach. Routingiem audio aplikacji zarządza automatycznie AAOS w sposób opisany w konfiguracji zasad dotyczących dźwięku.
Ponieważ Android zarządza multimediami w samochodzie, zewnętrzne źródła multimediów, takie jak tuner radiowy, powinny być reprezentowane przez aplikacje, które mogą obsługiwać skupienie dźwięku i zdarzenia związane z kluczami multimediów dla źródła.
Dźwięki i strumienie na Androidzie
Systemy audio w pojazdach obsługują te dźwięki i strumienie:
Rysunek 1. Schemat architektury skoncentrowanej na strumieniu.
Android zarządza dźwiękami pochodzącymi z aplikacji, kontrolując te aplikacje i przekierowując ich dźwięki do urządzeń wyjściowych w HAL na podstawie typu dźwięku:
Strumienie logiczne, znane jako źródła w podstawowej nomenklaturze audio, są oznaczane atrybutami audio.
Strumienie fizyczne, znane jako urządzenia w podstawowej nomenklaturze audio, nie zawierają informacji kontekstowych po zmiksowaniu.
Ze względu na niezawodność dźwięki zewnętrzne (pochodzące z niezależnych źródeł, np. sygnały dźwiękowe dotyczące zapięcia pasów bezpieczeństwa) są zarządzane poza Androidem, poniżej poziomu HAL lub nawet na osobnym sprzęcie. Implementatorzy systemu muszą zapewnić mikser, który przyjmuje co najmniej jeden strumień wejściowy dźwięku z Androida, a następnie łączy te strumienie w odpowiednim sposób z zewnętrznych źródeł dźwięku wymaganych przez pojazd. HAL sterowania Androida 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 dźwięku i zewnętrzny mikser odpowiadają za to, aby dźwięki zewnętrzne istotne z punktu widzenia bezpieczeństwa były słyszalne, a także za miksowanie strumieni danych dostarczanych przez Androida i przekierowywanie ich do odpowiednich głośników.
Dźwięki w Androidzie
Aplikacje mogą mieć co najmniej 1 odtwarzacz, który współpracuje ze standardowymi interfejsami API Androida (np. AudioManager do kontrolowania punktu skupienia lub MediaPlayer do strumieniowego przesyłania danych), aby emitować co najmniej 1 logiczny strumień danych audio. Te dane mogą być mono mono lub dźwiękiem przestrzennym 7.1, ale są kierowane i traktowane jako pojedyncze źródło. Strumień aplikacji jest powiązany z atrybutami audio, które podpowiadają systemowi, jak powinien brzmieć dźwięk.
Strumienie logiczne są wysyłane przez AudioService i przekierowywane do jednego (i tylko jednego) z dostępnych fizycznych strumieni wyjściowych, z których każdy jest wyjściem miksera w AudioFlinger. Gdy atrybuty audio zostaną zmiksowane do fizycznego strumienia, nie są już dostępne.
Każdy fizyczny strumień jest następnie dostarczany do interfejsu Audio HAL do 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 zdalnymi procesorami w ramach fizycznej sieci pojazdu. W obu przypadkach zadaniem implementacji interfejsu Audio HAL jest dostarczenie rzeczywistych danych próbek i ustawienie ich tak, aby były słyszalne.
strumieniowanie zewnętrzne,
Strumienie dźwięku, które nie powinny być kierowane przez Androida (ze względów certyfikacyjnych lub ze względów związanych z synchronizacją), mogą być wysyłane bezpośrednio do zewnętrznego miksera. Od Androida 11 interfejs HAL może żądać skupienia na tych zewnętrznych dźwiękach, aby poinformować Androida, aby mógł podjąć odpowiednie działania, takie jak wstrzymanie multimediów lub uniemożliwienie innym aplikacji przejęcia kontroli.
Jeśli strumienie zewnętrzne to źródła multimediów, które powinny wchodzić w interakcje ze środowiskiem dźwięku generowanym przez Androida (np. zatrzymywać odtwarzanie MP3, gdy włączony jest tuner zewnętrzny), powinny być reprezentowane przez aplikację na Androida. Taka aplikacja może prosić o skupienie dźwięku w imieniu źródła multimediów zamiast HAL i może odpowiadać na powiadomienia o skupieniu, uruchamiając i zatrzymywając źródło zewnętrzne w sposób zgodny z zasadami Androida dotyczącymi skupienia.
Aplikacja jest też odpowiedzialna za obsługę zdarzeń związanych z klawiszami multimedialnymi, takich jak odtwarzanie i wstrzymywanie. Jednym z sugerowanych mechanizmów kontroli takich urządzeń zewnętrznych jest HwAudioSource
. Więcej informacji znajdziesz w artykule Łączenie urządzenia wejściowego w AAOS.
Urządzenia wyjściowe
Na poziomie interfejsu HAL dźwięku typ urządzenia AUDIO_DEVICE_OUT_BUS
zapewnia urządzenie wyjściowe ogólnego przeznaczenia do użytku w systemach audio pojazdu. Urządzenie autobusowe obsługuje adresowalne porty (gdzie każdy port jest punktem końcowym fizycznego strumienia) i jest oczekiwane, że będzie jedynym obsługiwanym typem urządzenia wyjściowego w pojeździe.
Implementacja systemu może używać jednego portu magistrali do wszystkich dźwięków Androida. W takim przypadku Android miksuje wszystkie dźwięki i przesyła je jako jeden strumień. Alternatywnie HAL może udostępnić jeden port magistrali dla każdego CarAudioContext, aby umożliwić jednoczesną dostawę dowolnego typu dźwięku. Dzięki temu implementacja HAL może miksować i zmieniać głośność różnych dźwięków zgodnie z potrzebami.
Przypisywanie kontekstów dźwięku 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.