Android 10 zwiększa wygodę użytkowników, którzy wymagają, aby więcej niż 1 aktywne nagrywanie dźwięku było wykonywane jednocześnie, na przykład gdy użytkownik chce sterować rozmową 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 efekcie interfejs HAL i podsystem audio muszą obsługiwać jednocześnie kilka aktywnych strumieni wejściowych, nawet jeśli w niektórych przypadkach tylko jeden strumień dostarcza niecichego dźwięku do aktywnego klienta.
Wymagania dotyczące CDD
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 danych 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.
HAL audio musi obsługiwać co najmniej jeden egzemplarz 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ć inną listę urządzeń.
Jeśli technologia jest zgodna, zaleca się, aby interfejs HAL dźwięku 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 rdzeń), HAL audio musi wybrać, który strumień ma kontrolować wybór urządzenia.
W takim przypadku:
- Wynikowy stan musi być spójny i oferować ten sam wybór urządzenia, gdy powtarzany jest ten sam scenariusz.
- Po zakończeniu stanu równoczesności pozostały aktywny strumień musi zostać przekierowany do urządzenia, którego dotyczy żądanie w tym strumieniu.
Jeśli kolejność priorytetów jest zdefiniowana przez HAL audio w przypadku aktywnych przypadków użycia, zastosuj tę samą kolejność, co w source_priority()
w frameworks/av/services/audiopolicy/common/include/policy.h
.
Wstępne przetwarzanie wyboru
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. Jednak niektóre z nich mogą się pokrywać podczas aktywacji i dezaktywacji przypadku użycia, co spowoduje, że w tym samym strumieniu wejściowym będą uruchamiane jednocześnie 2 aktywne procesy (na przykład 2 instancje mechanizmu usuwania echa). 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ć wstępne przetwarzanie różnych strumieni, nawet jeśli korzystają z tego samego urządzenia wejściowego. Oznacza to, że wstępne przetwarzanie powinno zostać zastosowane po demuxowaniu strumieni z głównego źródła danych.
Jeśli ze względów technicznych w danym podsystemie audio nie jest to możliwe, do listy HAL audio 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 AP może nastąpić podczas aktywnego połączenia głosowego. Ta sytuacja nie jest nowa 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 AP.
- Przechwytywanie ścieżek RX i TX połączenia
- Nagrywanie z urządzenia wejściowego (np. wbudowanego mikrofonu)
Nagraj rozmowę RX i TX
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
.
Po nawiązaniu połączenia (tryb audio AudioMode.IN_CALL
) powinien być dostępny co najmniej 1 aktywny strumień przechwytywania z urządzenia AudioDevice.IN_TELEPHONY_RX
.
Przechwytuj 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 otwarcie i aktywowanie strumieni wejściowych z punktu dostępu zgodnie z opisem w sekcji Równoczesna aktywność strumieni wejściowych punktu dostępu.
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.
Równoczesne przechwytywanie z DSP i punktu dostępu
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.
Powinna to być odzwierciedlona współbieżna flaga przechwytywania zgłaszana przez HAL aktywujący dźwięk za pomocą deskryptora implementacji: ISoundTriggerHw.Properties.concurrentCapture = true
.
Interfejs HAL audio powinien też udostępniać i wprowadzać profil specyficzny dla przechwytywania słów-kluczy oznaczony 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ć ładowane jednocześnie przez HAL wyzwalania dźwięku.
Przechwytywanie danych z tego profilu wejściowego powinno być możliwe, gdy inne profile wejściowe są aktywne.
Konsekwencje implementacji 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 zainstalowanych 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 wejdzie w interakcję z Asystentem. np. po wywołaniu słowa-klucza.
- 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 realizowana za pomocą innej aplikacji, np. Asystenta.
- Użytkownicy powinni mieć możliwość wyłączenia mikrofonu lub uruchamiania Asystenta.
- Podczas przechowywania nagrań dźwiękowych użytkownicy powinni mieć możliwość ich przeglądania, przeglądania i usuwania w każdej chwili.
Ulepszenia funkcjonalne Androida 10
Asystenci nie blokują się nawzajem
Na Androidzie 9 lub starszym, gdy na urządzeniu są 2 Asystenci zawsze włączeni, tylko jeden z nich może nasłuchiwać słowa kluczowego. Dlatego konieczne było przełączenie się między tymi dwoma asystentami. W Androidzie 10 domyślny Asystent może słuchać równocześnie z drugim Asystentem. Dzięki temu korzystanie z Asystenta będzie przebiegać sprawniej.
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 audio HAL
Przykład implementacji HAL audio zgodnej z wytycznymi podanymi w tym dokumencie można znaleźć w AOSP.