Android 10 poprawia komfort korzystania z funkcji, które wymagają jednoczesnego korzystania z więcej niż 1 aktywnego przechwytywania dźwięku, np. gdy użytkownik chce sterować połączeniem VoIP lub nagrywaniem wideo za pomocą poleceń głosowych udostępnianych przez usługę ułatwień dostępu.
Platforma audio wdraża zasady, które umożliwiają jednoczesne przechwytywanie dźwięku przez określone aplikacje z uprawnieniami i zwykłe aplikacje.
Zasada równoczesności jest realizowana przez wyciszenie przechwyczonej ścieżki audio, a nie przez uniemożliwienie aplikacji rozpoczęcia przechwytywania. Umożliwia to dynamiczne reagowanie na zmiany liczby i typów przypadków użycia aktywnego rejestrowania, bez uniemożliwiania aplikacji rozpoczęcia rejestrowania w przypadku, gdy może ona odzyskać pełny dostęp do mikrofonu po zakończeniu rejestrowania przez inną aplikację.
W konsekwencji interfejs HAL i podsystem audio muszą obsługiwać kilka aktywnych strumieni wejściowych jednocześnie, nawet jeśli w niektórych przypadkach tylko jeden strumień dostarcza dźwięk do aktywnego klienta.
Wymagania dotyczące weryfikacji tożsamości
Wymagania dotyczące obsługi równoczesnego przechwytywania znajdziesz w CDD.
Rejestrowanie sytuacji z użyciem HAL dźwięku
Różne scenariusze jednoczesnego przechwytywania mogą prowadzić do różnych sytuacji pod względem liczby aktywnych strumieni wejściowych, wyboru urządzenia wejściowego lub konfiguracji wstępnego przetwarzania.
Równoczesne działanie może występować w przypadku:
- kilka strumieni wejściowych z procesora aplikacji (AP);
- strumienie wejściowe i połączenie głosowe,
- strumienie wejściowe i DSP audio z wykrywaniem słów-kluczy o niskim poborze mocy;
Równoległa aktywność strumieni danych wejściowych AP
Framework audio używa pliku konfiguracji zasad dotyczących dźwięku (audio_policy_configuration.xml
), aby określić, ile strumieni wejściowych może być otwartych i aktywnych jednocześnie.
System HAL dźwięku musi obsługiwać co najmniej jeden element każdego profilu wejściowego (mixPort
o roli sink
) wymienionego w otwartym i aktywnym pliku konfiguracji.
Wybór urządzenia
Gdy kilka aktywnych klientów jest połączonych z tym samym strumieniem danych wejściowych HAL, platforma wybiera odpowiednie urządzenie dla tego strumienia danych wejściowych na podstawie priorytetu przypadku użycia.
Gdy aktywnych jest kilka strumieni danych wejściowych, każdy z nich może mieć inny wybór urządzeń.
Jeśli technologia jest zgodna, zaleca się, aby HAL audio i podsystem umożliwiały przechwytywanie różnych strumieni z różnych urządzeń, takich jak słuchawki Bluetooth i wbudowany mikrofon.
Jeśli występuje niezgodność (np. 2 urządzenia mają ten sam interfejs cyfrowego audio lub ten sam backend), HAL audio musi wybrać, który strumień ma kontrolować wybór urządzenia.
W takim przypadku:
- Wynikający z niego stan musi być spójny i oferować ten sam wybór urządzenia, gdy powtarzany jest ten sam scenariusz.
- Gdy stan równoczeństwa się zakończy, pozostały aktywny strumień musi zostać przekierowany do urządzenia, które zostało pierwotnie wybrane do tego strumienia.
Jeśli kolejność priorytetów jest zdefiniowana przez HAL dźwięku w przypadku aktywnych przypadków użycia, zastosuj tę samą kolejność, co w source_priority()
w frameworks/av/services/audiopolicy/common/include/policy.h
.
Wybór przetwarzania wstępnego
Platforma audio może poprosić o wstępne przetworzenie strumienia wejściowego za pomocą metod addEffect()
lub removeEffect()
HAL.
W przypadku przetwarzania wstępnego danego strumienia wejściowego, framework audio umożliwia tylko konfigurację odpowiadającą aktywnemu przypadkowi użycia o najwyższym priorytecie w danym strumieniu wejściowym. Podczas aktywacji i dezaktywacji przypadku użycia może jednak wystąpić pewne nakładanie się, co spowoduje, że 2 aktywne procesy (np. 2 wystąpienia anulowania echa) będą działać na tym samym strumieniu wejściowym. W takim przypadku implementacja HAL wybiera, które żądanie zostanie zaakceptowane. Śledzi aktywne żądania i przywraca prawidłowy stan, gdy jeden z procesów zostanie wyłączony.
Gdy jednocześnie aktywnych jest kilka strumieni przechwytywania, różne żądania wstępnej obróbki mogą być wykonywane na różnych strumieniach.
Implementacje HAL i podsystemu audio powinny umożliwiać stosowanie różnych wstępnych przetworzeń do różnych strumieni, nawet jeśli korzystają z tego samego urządzenia wejściowego. Oznacza to, że wstępne przetwarzanie powinno być stosowane po demuxowaniu strumieni z podstawowego źródła danych.
Jeśli nie jest to możliwe z powodów technicznych w przypadku danego podsystemu audio, HAL audio powinien stosować reguły priorytetów podobne do tych wymienionych w sekcji Wybór urządzenia.
jednoczesne połączenie głosowe i przechwytywanie z AP;
Przechwytywanie z AP może nastąpić podczas aktywnego połączenia głosowego. Ta sytuacja nie jest nowością w Androidzie 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ą 2 rodzaje przechwytywania z punktu dostępu.
- Przechwytywanie ścieżek RX i TX połączenia
- Nagrywanie z urządzenia wejściowego (np. wbudowanego mikrofonu)
rejestrowanie danych RX i TX dotyczących połączeń,
Przechwytywanie RX i TX połączenia jest wywoływane przez użycie źródła audio AudioSource.VOICE_UPLINK
lub AudioSource.VOICE_DOWNLINK
lub urządzenia AudioDevice.IN_TELEPHONY_RX
.
Profil HAL dźwięku powinien udostępniać profil wejścia (mixPort
o roli sink
) z dostępną ścieżką z urządzenia AudioDevice.IN_TELEPHONY_RX
.
Gdy połączenie jest aktywne (tryb audio: AudioMode.IN_CALL
), powinno być możliwe posiadanie co najmniej 1 aktywnej ścieżki przechwytywania z urządzenia AudioDevice.IN_TELEPHONY_RX
.
rejestrowanie dźwięku z urządzeń wejściowych podczas aktywnego połączenia,
Gdy połączenie jest aktywne (tryb audio jest ustawiony na AudioMode.IN_CALL
), powinno być możliwe otwieranie i aktywowanie strumieni wejściowych z AP zgodnie z opisem w sekcji Równoległa aktywność strumieni wejściowych AP.
Priorytet wyboru urządzenia i wstępnego przetwarzania powinien jednak zawsze zależeć od wywołania głosowego, aby uniknąć konfliktu z żądaniami z potoku danych AP.
jednoczesne przechwytywanie z platformy DSP i AP,
Jeśli podsystem audio zawiera DSP obsługujący funkcje wykrywania słów-kluczy lub kontekstu audio o niskim poborze mocy, implementacja powinna obsługiwać jednoczesne przechwytywanie z AP i DSP audio.
Obejmuje to zarówno przechwytywanie przez DSP w fazie wstępnego wykrywania, jak i przez AP z AudioSource.HOTWORD
, gdy wykrycie zostanie zainicjowane przez DSP.
Powinien on być odzwierciedlony przez flagę jednoczesnego przechwytywania zgłaszaną przez HAL dźwiękowego wyzwalacza za pomocą deskryptora implementacji: ISoundTriggerHw.Properties.concurrentCapture = true
.
HAL dźwięku powinien też udostępniać i przetwarzać profil przeznaczony do rozpoznawania słów kluczowych, który jest identyfikowany przez flagę AudioInputFlag.HW_HOTWORD
. Implementacja powinna obsługiwać otwieranie i aktywowanie na tym profilu co najmniej takiej liczby strumieni, która jest równa liczbie modeli dźwięku, które mogą być wczytywane jednocześnie przez interfejs HAL wyzwalacza dźwięku.
Przechwytywanie z tego profilu wejściowego powinno być możliwe, gdy inne profile wejściowe są aktywne.
Wpływ na implementacje Asystenta
Wymagania dotyczące wykorzystania danych i powiadamiania użytkowników
Ponieważ jednoczesne korzystanie z mikrofonu może, w razie nadużycia, spowodować wyciek prywatnych danych użytkownika, w przypadku wstępnie załadowanych aplikacji uprzywilejowanych, które proszą o przyznanie roli Asystenta, należy spełnić te warunki i zapewnić odpowiednie 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 kluczowego.
- Aplikacje, które jednocześnie nasłuchują słów kluczowych, powinny wyświetlać użytkownikowi wizualne sygnały po wykryciu słowa kluczowego. Dzięki temu użytkownicy wiedzą, że dalsza rozmowa będzie prowadzona w innej aplikacji, np. w Asystencie.
- Użytkownicy powinni mieć możliwość wyłączenia mikrofonu lub wyzwalaczy Asystenta.
- Gdy nagrania dźwiękowe są przechowywane, użytkownicy powinni mieć do nich ciągły dostęp oraz możliwość ich przeglądania i usuwania w dowolnej chwili.
Ulepszenia funkcjonalności na Androidzie 10
Asystenci nie blokują się nawzajem
W przypadku Androida 9 lub starszego, gdy na urządzeniu są 2 Asystenci zawsze włączeni, tylko jeden z nich może nasłuchiwać słowa-klucza. Dlatego konieczne było przełączanie się między tymi dwoma Asystentami. W Androidzie 10 domyślny Asystent może jednocześnie słuchać razem z innym Asystentem. Dzięki temu użytkownicy będą mogli korzystać z obu Asystentów w bardziej płynny sposób.
Aplikacje, które mają otwarty mikrofon
Gdy aplikacje takie jak Shazam czy Waze utrzymują mikrofon w stanie otwartym, domyślny Asystent może nadal nasłuchiwać słowa-klucza.
W przypadku aplikacji Asystenta innych niż domyślne nie ma żadnych zmian w Androidzie 10.
Przykładowa implementacja HAL dźwięku
Przykład implementacji HAL audio zgodnej z wytycznymi podanymi w tym dokumencie można znaleźć w AOSP.