Android 10 poprawia komfort użytkownika, ponieważ wymaga jednoczesnego wykonywania więcej niż jednego aktywnego przechwytywania dźwięku, na przykład jeśli użytkownik chce sterować rozmową VoIP lub rejestratorem wideo za pomocą poleceń głosowych udostępnianych przez usługę ułatwień dostępu.
Struktura audio implementuje zasadę zezwalającą tylko niektórym uprzywilejowanym aplikacjom na przechwytywanie jednocześnie ze zwykłymi aplikacjami.
Polityka współbieżności jest wdrażana poprzez wyciszanie przechwyconego dźwięku, a nie uniemożliwianie aplikacji rozpoczęcia przechwytywania. Dzięki temu platforma może dynamicznie uwzględniać zmiany w liczbie i typach aktywnych przypadków użycia przechwytywania, nie uniemożliwiając 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 warstwy 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 aktywnemu klientowi dźwięk bez ciszy.
Wymagania CDD
Zobacz CDD , aby zapoznać się z wymaganiami dotyczącymi obsługi współbieżnego przechwytywania.
Przechwytuj sytuacje z dźwięku HAL
Scenariusz współbieżnego 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ć pomię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 procesor DSP audio wdrażający wykrywanie słów kluczowych o małej 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żna jednocześnie otworzyć i aktywować.
Jako minimum warstwa HAL audio musi obsługiwać co najmniej jedną instancję każdego profilu wejściowego ( mixPort
lub sink
roli) wymienionego w otwartym i aktywnym pliku konfiguracyjnym .
Wybór urządzenia
Gdy do tego samego strumienia wejściowego HAL podłączonych jest kilku aktywnych klientów, platforma 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 kompatybilna, zaleca się, aby warstwa audio HAL i podsystem umożliwiały przechwytywanie różnych strumieni z różnych urządzeń, takich jak zestaw słuchawkowy Bluetooth i wbudowany mikrofon.
Jeśli występuje niezgodność (na przykład dwa urządzenia korzystają z tego samego cyfrowego interfejsu audio lub zaplecza), warstwa audio 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ądzeń, gdy powtarza się ten sam scenariusz.
- Po zakończeniu stanu współbieżności pozostały aktywny strumień musi zostać skierowany do początkowo żądanego urządzenia w tym strumieniu.
Jeśli kolejność priorytetów jest zdefiniowana przez audio HAL pomiędzy aktywnymi przypadkami użycia, postępuj zgodnie z tą samą kolejnością, jaką określono w source_priority()
w frameworks/av/services/audiopolicy/common/include/policy.h
Wybór wstępnego przetwarzania
Struktura audio może zażądać wstępnego przetwarzania strumienia wejściowego przy użyciu metod HAL addEffect()
lub removeEffect()
.
Do wstępnego przetwarzania danego strumienia wejściowego struktura audio umożliwia tylko konfigurację odpowiadającą aktywnemu przypadkowi użycia o najwyższym priorytecie w strumieniu wejściowym. Jednakże, podczas aktywacji i dezaktywacji przypadków użycia może zachodzić pewne nakładanie się, powodując, że dwa jednoczesne aktywne procesy (na przykład dwie instancje funkcji usuwania echa) będą działać na tym samym strumieniu wejściowym. W tym przypadku implementacja 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 jednocześnie aktywnych jest kilka strumieni przechwytywania, w różnych strumieniach mogą być uruchamiane różne żądania przetwarzania wstępnego.
Implementacje podsystemów HAL i audio powinny umożliwiać zastosowanie różnego przetwarzania wstępnego do różnych strumieni, nawet jeśli korzystają one z tego samego urządzenia wejściowego. Oznacza to, że po demultipleksowaniu strumieni z głównego źródła przechwytywania należy zastosować przetwarzanie wstępne.
Jeśli nie jest to możliwe ze względów technicznych w danym podsystemie audio, HAL audio powinien zastosować zasady priorytetów podobne do tych wymienionych w Wybór urządzenia .
Jednoczesne połączenie głosowe i przechwytywanie z punktu dostępowego
Przechwytywanie z punktu dostępowego może nastąpić, 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 dla tego scenariusza.
Podczas połączenia potrzebne są dwa różne typy przechwytywania z punktu dostępowego.
- Przechwytywanie ścieżek połączeń RX i TX
- Przechwytywanie z urządzenia wejściowego (na przykład wbudowanego mikrofonu)
Przechwytuj połączenia 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
.
Warstwy HAL audio powinny udostępniać profil wejściowy ( mixPort
roli sink
) z dostępną trasą z urządzenia AudioDevice.IN_TELEPHONY_RX
.
Kiedy połączenie jest nawiązywane (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 opisano w sekcji Jednoczesna aktywność strumieni wejściowych AP .
Jednakże priorytet wyboru urządzenia i wstępnego przetwarzania powinien zawsze być ustalany na podstawie połączenia głosowego w przypadku konfliktu z żądaniami ze strumieni wejściowych punktu dostępowego.
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 kluczowych, implementacja powinna obsługiwać jednoczesne przechwytywanie z punktu dostępowego i procesora DSP audio. Obejmuje to zarówno przechwytywanie przez procesor DSP w początkowej fazie wykrywania, jak i przechwytywanie przez punkt dostępowy za pomocą AudioSource.HOTWORD
po wyzwoleniu detekcji przez procesor DSP.
Powinno to być odzwierciedlone przez flagę współbieżnego przechwytywania zgłaszaną przez wyzwalacz dźwiękowy HAL za pośrednictwem deskryptora implementacji: ISoundTriggerHw.Properties.concurrentCapture = true
.
HAL audio powinien także udostępniać i wprowadzać profil specyficzny dla przechwytywania słów kluczowych, identyfikowany przez flagę AudioInputFlag.HW_HOTWORD
. Implementacja powinna obsługiwać otwieranie i aktywowanie na tym profilu liczby strumieni co najmniej równej liczbie modeli dźwiękowych, 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żytkowników
Ponieważ równoczesne korzystanie z mikrofonu, jeśli jest nadużywane, może spowodować wyciek prywatnych danych użytkownika, potrzebujemy następujących warunków i gwarancji, które mają zastosowanie do uprzywilejowanych, wstępnie załadowanych aplikacji, które proszą o przyjęcie roli Asystenta.
- Dane zbierane przez mikrofon nie powinny opuszczać 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 udostępniać użytkownikowi wizualne wskazówki po wykryciu słowa-klucza. Pomaga to użytkownikom zrozumieć, że dalsze rozmowy będą odbywać się za pośrednictwem innej aplikacji, np. Asystenta.
- Użytkownicy powinni mieć możliwość wyłączenia mikrofonu lub wyzwalaczy Asystenta.
- Użytkownicy, którzy przechowują nagrania dźwiękowe, powinni mieć możliwość dostępu do nich, przeglądania ich i usuwania w dowolnym momencie.
Ulepszenia funkcjonalne dla Androida 10
Asystenci nie blokują się nawzajem
Jeśli na urządzeniu z Androidem 9 lub starszym są dwaj zawsze aktywni Asystenci, tylko jeden z nich może nasłuchiwać słowa-klucza. W związku z tym zaistniała potrzeba przełączania się między dwoma Asystentami. W systemie Android 10 domyślny Asystent może słuchać jednocześnie z drugim Asystentem. Zapewnia to znacznie płynniejszą obsługę obu Asystentów.
Aplikacje trzymające mikrofon otwarty
Gdy aplikacje takie jak Shazam lub Waze przytrzymają mikrofon otwarty, domyślny Asystent może nadal nasłuchiwać słowa-klucza.
W przypadku aplikacji Asystenta innych niż domyślne zachowanie Androida 10 nie ulega zmianie.
Przykładowa implementacja audio HAL
Przykład implementacji audio HAL zgodnej z wytycznymi zawartymi w tym dokumencie można znaleźć w AOSP .