Równoczesne przechwytywanie

Android 10 poprawia komfort użytkowania w przypadku funkcji, które wymagają jednoczesnego aktywnego przechwytywania dźwięku z więcej niż jednego źródła, np. gdy użytkownik chce sterować połączeniem VoIP lub rejestratorem wideo za pomocą poleceń głosowych dostarczanych przez usługę ułatwień dostępu.

Platforma audio wdraża zasadę, która zezwala tylko niektórym aplikacjom z uprawnieniami na przechwytywanie dźwięku równocześnie ze zwykłymi aplikacjami.

Zasada współbieżności jest wdrażana przez wyciszanie przechwyconego dźwięku, a nie przez uniemożliwianie aplikacji rozpoczęcia przechwytywania. Umożliwia to dynamiczne reagowanie na zmiany liczby i rodzajów aktywnych przypadków użycia przechwytywania bez uniemożliwiania aplikacji rozpoczęcia przechwytywania w sytuacji, w której może ona odzyskać pełny dostęp do mikrofonu po zakończeniu przechwytywania przez inną aplikację.

W konsekwencji HAL audio i podsystem audio muszą obsługiwać jednocześnie kilka aktywnych strumieni wejściowych, nawet jeśli w niektórych przypadkach tylko jeden strumień dostarcza dźwięk do aktywnego klienta.

Wymagania dotyczące CDD

Wymagania dotyczące obsługi równoczesnego przechwytywania znajdziesz w sekcji CDD.

Przechwytywanie sytuacji z warstwy HAL audio

Scenariusz jednoczesnego przechwytywania może prowadzić do różnych sytuacji pod względem liczby aktywnych strumieni wejściowych, wyboru urządzenia wejściowego lub konfiguracji przetwarzania wstępnego.

Równoczesność może wystąpić w przypadku tych elementów:

  • Kilka strumieni wejściowych z procesora aplikacji (AP)
  • strumienie wejściowe i połączenie głosowe,
  • strumienie wejściowe i procesor DSP audio implementujący wykrywanie słów kluczowych o niskim poborze mocy;

Równoczesna aktywność strumieni wejściowych interfejsu API

Plik konfiguracyjny zasad audio audio_policy_configuration.xml jest używany przez platformę audio do określania, ile strumieni wejściowych może być otwartych i aktywnych jednocześnie.

Interfejs HAL audio musi obsługiwać co najmniej 1 instancję każdego profilu wejściowego (mixPort roli sink) wymienionego w otwartym i aktywnym pliku konfiguracji.

Wybór urządzenia

Gdy do tego samego strumienia wejściowego HAL jest dołączonych 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 z nich może mieć inny wybór urządzenia.

Jeśli technologia jest zgodna, zaleca się, aby warstwa HAL audio i podsystem umożliwiały różnym strumieniom przechwytywanie dźwięku z różnych urządzeń, takich jak słuchawki Bluetooth i wbudowany mikrofon.

Jeśli wystąpi niezgodność (np. 2 urządzenia mają to samo cyfrowe złącze audio lub backend), HAL audio musi wybrać strumień, który będzie sterować wyborem urządzenia.

W takim przypadku:

  • Wynikowy stan musi być spójny i oferować ten sam wybór urządzenia, gdy ten sam scenariusz jest powtarzany.
  • Gdy stan współbieżności się zakończy, pozostały aktywny strumień musi zostać przekierowany do urządzenia, które było początkowo żądane w tym strumieniu.

Jeśli kolejność priorytetów jest zdefiniowana przez HAL audio między aktywnymi przypadkami użycia, postępuj zgodnie z kolejnością podaną w source_priority()frameworks/av/services/audiopolicy/common/include/policy.h.

Wybór przetwarzania wstępnego

Platforma audio może zażądać wstępnego przetwarzania strumienia wejściowego za pomocą metod HAL addEffect() lub removeEffect().

W przypadku wstępnego przetwarzania danego strumienia wejściowego platforma audio umożliwia tylko konfigurację odpowiadającą aktywnemu przypadkowi użycia o najwyższym priorytecie w tym strumieniu. Podczas aktywacji i dezaktywacji przypadków użycia może jednak wystąpić pewne nakładanie się, co spowoduje, że na tym samym strumieniu wejściowym będą działać 2 jednocześnie aktywne procesy (np. 2 wystąpienia eliminatora echa). W takim przypadku implementacja HAL wybiera, które żądanie zostanie zaakceptowane. Śledzi aktywne żądania i przywraca prawidłowy stan, gdy którykolwiek z procesów zostanie wyłączony.

Gdy jednocześnie aktywnych jest kilka strumieni przechwytywania, w różnych strumieniach mogą być uruchamiane różne żądania wstępnego przetwarzania.

Implementacje HAL i podsystemu audio powinny umożliwiać stosowanie różnych wstępnych procesów do różnych strumieni, nawet jeśli korzystają one z tego samego urządzenia wejściowego. Oznacza to, że wstępne przetwarzanie należy zastosować po rozdzieleniu strumieni z głównego źródła przechwytywania.

Jeśli z przyczyn technicznych nie jest to możliwe w danym podsystemie audio, warstwa HAL audio powinna stosować reguły priorytetów podobne do tych wymienionych w sekcji Wybór urządzenia.

Jednoczesne połączenie głosowe i przechwytywanie z punktu dostępu

Przechwytywanie z punktu dostępu może się odbywać podczas aktywnej rozmowy głosowej. Ta sytuacja nie jest nowa w Androidzie 10 i nie jest bezpośrednio związana z funkcją jednoczesnego rejestrowania, ale warto wspomnieć o wytycznych dotyczących tego scenariusza.

Podczas połączenia potrzebne są 2 różne typy przechwytywania z punktu dostępu.

Rejestrowanie połączeń RX i TX

Rejestrowanie danych RX i TX połączenia jest wywoływane przez użycie źródła dźwięku AudioSource.VOICE_UPLINK lub AudioSource.VOICE_DOWNLINK lub urządzenia AudioDevice.IN_TELEPHONY_RX.

Warstwy HAL audio powinny być dostępne w profilu wejściowym (mixPort o roli sink) z dostępną ścieżką z urządzenia AudioDevice.IN_TELEPHONY_RX.

Gdy połączenie jest aktywne (tryb audio to AudioMode.IN_CALL), powinno być możliwe uzyskanie 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), można otwierać i aktywować strumienie wejściowe z AP zgodnie z opisem w sekcji Równoczesna aktywność strumieni wejściowych AP.

Jednak w przypadku konfliktu z żądaniami z wejściowych strumieni AP priorytet wyboru urządzenia i wstępnego przetwarzania powinien zawsze mieć połączenie głosowe.

Jednoczesne rejestrowanie danych z DSP i AP

Jeśli podsystem audio zawiera procesor DSP obsługujący kontekst audio o niskim poborze mocy lub funkcje wykrywania słów kluczowych, implementacja powinna obsługiwać jednoczesne przechwytywanie z procesora aplikacji i procesora DSP audio. Obejmuje to zarówno przechwytywanie przez platformę DSP w początkowej fazie wykrywania, jak i przechwytywanie przez AP z AudioSource.HOTWORD po wykryciu przez platformę DSP.

Powinno to być odzwierciedlone przez flagę jednoczesnego przechwytywania zgłaszaną przez HAL wyzwalacza dźwięku za pomocą deskryptora implementacji: ISoundTriggerHw.Properties.concurrentCapture = true.

Warstwa HAL audio powinna też udostępniać i wprowadzać profil specyficzny dla przechwytywania słowa kluczowego, który jest identyfikowany przez flagę AudioInputFlag.HW_HOTWORD. Implementacja powinna obsługiwać otwieranie i aktywowanie w tym profilu liczby strumieni co najmniej równej liczbie modeli dźwięku, które mogą być jednocześnie wczytywane przez HAL wyzwalacza dźwięku.

Przechwytywanie z tego profilu wejściowego powinno być możliwe, gdy aktywne są inne profile wejściowe.

Wpływ na implementacje Asystenta

Wymagania dotyczące wykorzystania danych i powiadamiania użytkowników

Jednoczesne korzystanie z mikrofonu może w przypadku nadużycia prowadzić do wycieku prywatnych danych użytkownika, dlatego w przypadku uprzywilejowanych, wstępnie załadowanych aplikacji, które proszą o pełnienie roli Asystenta, musimy zastosować te warunki i gwarancje:

  • Dane zbierane przez mikrofon nie powinny opuszczać urządzenia, chyba że użytkownik wchodzi w interakcję z Asystentem. Na przykład po wywołaniu słowa aktywującego.
  • Aplikacje nasłuchujące jednocześnie powinny wyświetlać użytkownikowi wizualne wskazówki po wykryciu słowa aktywującego. Ułatwia to użytkownikom zrozumienie, że dalsze rozmowy będą prowadzone w innej aplikacji, np. Asystencie.
  • Użytkownicy powinni mieć możliwość wyłączenia mikrofonu lub wywoływania Asystenta.
  • Gdy nagrania dźwiękowe są przechowywane, użytkownicy powinni mieć możliwość uzyskiwania do nich dostępu, przeglądania ich i usuwania w dowolnym momencie.

Ulepszenia funkcjonalne w Androidzie 10

Asystenci nie blokują się nawzajem

Na Androidzie 9 lub starszym, gdy na urządzeniu są 2 asystenci działający w trybie ciągłym, tylko jeden z nich może nasłuchiwać słowa aktywującego. Dlatego konieczne było przełączanie się między tymi dwoma asystentami. W Androidzie 10 domyślny Asystent może słuchać jednocześnie z innym Asystentem. Dzięki temu użytkownicy obu asystentów będą mogli korzystać z nich w znacznie wygodniejszy sposób.

Aplikacje, które utrzymują mikrofon włączony

Gdy aplikacje takie jak Shazam czy Waze mają otwarty mikrofon, domyślny Asystent może nadal nasłuchiwać słowa aktywacyjnego.

W przypadku aplikacji Asystenta innych niż domyślne działanie na Androidzie 10 nie ulegnie zmianie.

Przykładowa implementacja HAL audio

Przykład implementacji HAL audio zgodnej z wytycznymi w tym dokumencie można znaleźć w AOSP.