Android 10 poprawia wrażenia użytkownika, które wymagają jednoczesnego przechwytywania więcej niż jednego aktywnego dźwięku, na przykład, jeśli użytkownik chce sterować połączeniem VoIP lub rejestratorem wideo za pomocą poleceń głosowych zapewnianych przez usługę ułatwień dostępu.
Struktura audio implementuje zasady pozwalające tylko niektórym uprzywilejowanym aplikacjom na jednoczesne przechwytywanie ze zwykłymi aplikacjami.
Zasady współbieżności są implementowane przez wyciszenie przechwyconego dźwięku, a nie przez uniemożliwienie aplikacji rozpoczęcia przechwytywania. Dzięki temu platforma może dynamicznie reagować na zmiany liczby i typów aktywnych przypadków użycia przechwytywania, bez uniemożliwiania aplikacji rozpoczęcia przechwytywania w przypadku, gdy może odzyskać pełny dostęp do mikrofonu po zakończeniu przechwytywania przez inną aplikację.
Konsekwencją dla audio HAL i podsystemu audio jest to, że muszą one obsługiwać jednocześnie kilka aktywnych strumieni wejściowych, nawet jeśli w niektórych przypadkach tylko jeden strumień dostarcza niecichy dźwięk do aktywnego klienta.
Wymagania CDD
Zobacz CDD , aby zapoznać się z wymaganiami dotyczącymi obsługi współbieżnego przechwytywania.
Uchwyć sytuacje z audio HAL
Scenariusz równoczesnego przechwytywania może skutkować różnymi sytuacjami pod względem liczby aktywnych strumieni wejściowych, wyboru urządzenia wejściowego lub konfiguracji przetwarzania wstępnego.
Współbieżność może wystąpić między następującymi elementami:
- Kilka strumieni wejściowych z procesora aplikacji (AP)
- Strumienie wejściowe i połączenie głosowe
- Strumienie wejściowe i dźwięk DSP realizujące wykrywanie słów-kluczy o niskim poborze mocy
Jednoczesna aktywność strumieni wejściowych AP
Plik konfiguracyjny zasad audio audio_policy_configuration.xml
jest używany przez środowisko audio do określenia, ile strumieni wejściowych może być otwieranych i aktywnych jednocześnie.
Audio HAL musi co najmniej obsługiwać co najmniej jedną instancję każdego profilu wejściowego ( mixPort
of role sink
) wymienionego w otwartym i aktywnym pliku konfiguracyjnym .
Wybór urządzenia
Gdy kilku aktywnych klientów jest podłączonych do tego samego strumienia wejściowego warstwy HAL, struktura wybiera odpowiednie urządzenie dla tego strumienia wejściowego na podstawie priorytetu przypadku użycia.
Gdy aktywnych jest kilka strumieni wejściowych, każdy strumień może mieć inny wybór urządzenia.
Jeśli technologia jest zgodna, zaleca się, aby warstwa HAL i podsystem audio umożliwiały przechwytywanie różnych strumieni z różnych urządzeń, takich jak zestaw słuchawkowy Bluetooth i wbudowany mikrofon.
W przypadku niezgodności (na przykład dwa urządzenia współdzielą ten sam cyfrowy interfejs audio lub zaplecze) audio warstwa HAL musi wybrać, który strumień kontroluje wybór urządzenia.
W tym przypadku:
- Wynikowy stan musi być spójny i oferować ten sam wybór urządzenia, gdy powtarza się ten sam scenariusz.
- Po zakończeniu stanu współbieżności pozostały aktywny strumień musi być kierowany do początkowo żądanego urządzenia w tym strumieniu.
Jeśli kolejność priorytetów jest zdefiniowana przez audio HAL między aktywnymi przypadkami użycia, postępuj zgodnie z tą samą kolejnością, jaką można znaleźć w source_priority()
w frameworks/av/services/audiopolicy/common/include/policy.h
Wybór przed przetwarzaniem
Struktura audio może zażądać przetwarzania wstępnego w strumieniu wejściowym za pomocą metod HAL addEffect()
lub removeEffect()
.
W przypadku przetwarzania wstępnego na danym strumieniu wejściowym struktura audio umożliwia tylko konfigurację odpowiadającą aktywnemu przypadkowi użycia o najwyższym priorytecie w strumieniu wejściowym. Jednak może wystąpić pewne nakładanie się podczas aktywacji i dezaktywacji przypadku użycia, powodując, że dwa jednoczesne aktywne procesy (na przykład dwie instancje tłumienia echa) będą działać na tym samym strumieniu wejściowym. W takim przypadku implementacja warstwy HAL wybiera, które żądanie zostanie zaakceptowane; śledzi aktywne żądania i przywraca prawidłowy stan, gdy którykolwiek z procesów jest wyłączony.
Gdy kilka strumieni przechwytywania jest aktywnych jednocześnie, różne żądania przetwarzania wstępnego mogą być uruchamiane w różnych strumieniach.
Implementacje podsystemów HAL i audio powinny umożliwiać zastosowanie różnych procesów przetwarzania wstępnego do różnych strumieni, nawet jeśli współdzielą one to samo urządzenie wejściowe. Oznacza to, że wstępne przetwarzanie powinno być zastosowane po demuksacji strumieni z podstawowego źródła wychwytywania.
Jeśli nie jest to możliwe z przyczyn technicznych w danym podsystemie audio, w audio HAL należy zastosować reguły priorytetu podobne do tych wymienionych w sekcji Wybór urządzenia .
Jednoczesne połączenie głosowe i przechwytywanie z AP
Przechwytywanie z punktu dostępowego może mieć miejsce, gdy aktywne jest połączenie głosowe. Ta sytuacja nie jest nowa w systemie Android 10 i nie jest bezpośrednio związana z funkcją jednoczesnego przechwytywania, ale warto wspomnieć o wytycznych dotyczących tego scenariusza.
Podczas połączenia potrzebne są dwa różne typy przechwytywania z punktu dostępowego.
- Przechwytywanie połączeń RX i TX ścieżek
- Przechwytywanie z urządzenia wejściowego (na przykład wbudowanego mikrofonu)
Przechwytywanie połączeń RX i TX
Przechwytywanie połączeń RX i TX jest wyzwalane przez użycie źródła dźwięku AudioSource.VOICE_UPLINK
lub AudioSource.VOICE_DOWNLINK
i/lub urządzenia AudioDevice.IN_TELEPHONY_RX
.
Audio HAL powinny uwidaczniać się w profilu wejściowym ( mixPort
of role sink
) z dostępną trasą z urządzenia AudioDevice.IN_TELEPHONY_RX
.
Po nawiązaniu połączenia (tryb audio to AudioMode.IN_CALL
), powinno być możliwe posiadanie co najmniej jednego aktywnego strumienia przechwytywania z urządzenia AudioDevice.IN_TELEPHONY_RX
.
Przechwytywanie z urządzeń wejściowych, gdy połączenie jest aktywne
Gdy połączenie jest aktywne (tryb audio to AudioMode.IN_CALL
), powinno być możliwe otwieranie i aktywowanie strumieni wejściowych z AP, jak określono w sekcji Równoczesna aktywność strumieni wejściowych AP .
Jednak priorytet wyboru urządzenia i wstępnego przetwarzania powinien zawsze być kierowany przez połączenie głosowe w przypadku konfliktu z żądaniami ze strumieni wejściowych AP.
Jednoczesne przechwytywanie z DSP i AP
Gdy podsystem audio zawiera procesor DSP obsługujący kontekst audio o małej mocy lub funkcje wykrywania słów-kluczy, implementacja powinna obsługiwać jednoczesne przechwytywanie z punktu dostępowego AP i procesora DSP dźwięku. Obejmuje to zarówno przechwytywanie przez DSP podczas początkowej fazy wykrywania, jak i przechwytywanie przez punkt dostępowy za pomocą AudioSource.HOTWORD
po wykryciu przez DSP.
Powinno to być odzwierciedlone przez flagę współbieżnego przechwytywania zgłaszaną przez warstwę HAL wyzwalacza dźwięku za pośrednictwem deskryptora implementacji: ISoundTriggerHw.Properties.concurrentCapture = true
.
Dźwiękowa warstwa HAL powinna również ujawniać i wprowadzać profil specyficzny dla przechwytywania słów-kluczy identyfikowany przez flagę AudioInputFlag.HW_HOTWORD
. Implementacja powinna obsługiwać otwieranie i aktywowanie liczby strumieni w tym profilu co najmniej równej liczbie modeli dźwięku, które mogą być ładowane jednocześnie przez wyzwalacz dźwiękowy HAL.
Przechwytywanie z tego profilu wejściowego powinno być możliwe, gdy inne profile wejściowe są aktywne.
Implikacje dla wdrożeń Asystenta
Wymagania dotyczące wykorzystania danych i powiadamiania użytkownika
Ponieważ równoczesne korzystanie z mikrofonu, w przypadku nadużycia, może spowodować wyciek prywatnych danych użytkownika, musimy zastosować następujące warunki i gwarancje do uprzywilejowanych wstępnie załadowanych aplikacji, które proszą o pełnienie roli Asystenta.
- Dane zebrane przez mikrofon nie powinny opuścić urządzenia, chyba że użytkownik wchodzi w interakcję z Asystentem. Na przykład po uruchomieniu słowa-klucza.
- Aplikacje nasłuchujące jednocześnie powinny dostarczać użytkownikowi wizualnych wskazówek po wykryciu słowa-klucza. Pomaga to użytkownikom zrozumieć, że dalsze rozmowy będą przebiegać w innej aplikacji, takiej jak Asystent.
- Użytkownicy powinni mieć możliwość wyłączenia mikrofonu lub wyzwalaczy Asystenta.
- Gdy nagrania dźwiękowe są przechowywane, użytkownicy powinni mieć możliwość dostępu, przeglądania i usuwania nagrań w dowolnym momencie.
Ulepszenia funkcjonalne dla Androida 10
Asystenci nie blokują się nawzajem
W systemie Android 9 lub starszym, gdy na urządzeniu jest dwóch stale włączonych Asystentów, tylko jeden z nich może nasłuchiwać słowa-klucza. W związku z tym zaistniała potrzeba przełączenia się między dwoma Asystentami. W systemie Android 10 domyślny Asystent może słuchać jednocześnie z drugim Asystentem. Powoduje to znacznie płynniejsze działanie dla użytkowników z obydwoma Asystentami.
Aplikacje trzymające otwarty mikrofon
Gdy aplikacje takie jak Shazam lub Waze przytrzymują mikrofon otwarty, domyślny Asystent nadal może nasłuchiwać słowa-klucza.
W przypadku innych niż domyślne aplikacje Asystenta nie ma zmian w zachowaniu systemu Android 10.
Przykładowa implementacja audio HAL
Przykład implementacji audio HAL zgodnej z wytycznymi zawartymi w tym dokumencie można znaleźć w AOSP .