Android 10 migliora l'esperienza utente che richiede l'acquisizione simultanea di più audio attivi, ad esempio se l'utente vuole controllare una chiamata VoIP o una videocamera con i comandi vocali forniti da un servizio di accessibilità.
Il framework audio implementa il criterio che consente solo ad alcune app privilegiate di acquisire contemporaneamente con le app normali.
Il criterio di concorrenza viene implementato disattivando l'audio acquisito anziché impedendo all'applicazione di avviare l'acquisizione. In questo modo il framework può gestire dinamicamente le modifiche al numero e ai tipi di casi d'uso di acquisizione attiva, senza impedire a un'app di iniziare l'acquisizione nel caso in cui possa recuperare l'accesso completo al microfono al termine dell'acquisizione di un'altra app.
La conseguenza per l'HAL audio e il sottosistema audio è che devono supportare contemporaneamente più stream di input attivi, anche se in alcuni casi solo uno stream fornisce audio non silenzioso a un client attivo.
Requisiti CDD
Consulta il CDD per conoscere i requisiti per il supporto della cattura simultanea.
Acquisisci situazioni dall'HAL audio
Uno scenario di acquisizione simultanea può comportare situazioni diverse in termini di numero di stream di input attivi, selezione del dispositivo di input o configurazione di preelaborazione.
La contemporaneità può verificarsi tra:
- Diversi stream di input dall'unità di elaborazione delle applicazioni (AP)
- Stream di input e una chiamata vocale
- Stream di input e un DSP audio che implementa un rilevamento di hotword a basso consumo
Attività simultanea degli stream di input dell'AP
Il file di configurazione dei criteri audio audio_policy_configuration.xml
viene utilizzato dal framework audio per determinare quanti stream di input possono essere aperti e attivi contemporaneamente.
Come minimo, l'HAL audio deve supportare almeno un'istanza di ogni profilo di input (mixPort
di ruolo sink
) elencato nel file di configurazione aperto e attivo.
Selezione del dispositivo
Quando più client attivi sono collegati allo stesso flusso di input HAL, il framework seleziona il dispositivo appropriato per questo flusso di input in base alla priorità del caso d'uso.
Quando sono attivi più stream di input, ogni stream può avere una selezione di dispositivi diversa.
Se la tecnologia è compatibile, è consigliabile che l'HAL audio e il sottosistema consentano di acquisire stream diversi da dispositivi diversi, ad esempio un auricolare Bluetooth e un microfono integrato.
Se esiste un'incompatibilità (ad esempio due dispositivi condividono la stessa interfaccia audio digitale o lo stesso back-end), l'HAL audio deve scegliere quale stream controlla la selezione del dispositivo.
In questo caso:
- Lo stato risultante deve essere coerente e offrire la stessa selezione di dispositivi quando viene ripetuto lo stesso scenario.
- Al termine dello stato di concorrenza, lo stream attivo rimanente deve essere indirizzato al dispositivo inizialmente richiesto su questo stream.
Se un ordine di priorità è definito dall'HAL audio tra i casi d'uso attivi, segui lo stesso ordine trovato in source_priority()
in
frameworks/av/services/audiopolicy/common/include/policy.h
Selezione pre-elaborazione
Il framework audio può richiedere la preelaborazione di uno stream di input utilizzando i metodi HAL addEffect()
o removeEffect()
.
Per la pre-elaborazione su un determinato flusso di input, il framework audio abilita solo la configurazione corrispondente al caso d'uso attivo con priorità massima sullo stream di input. Tuttavia, potrebbe esserci una sovrapposizione durante l'attivazione e la disattivazione del caso d'uso, con l'esecuzione di due processi attivi simultanei (ad esempio, due istanze di cancellazione dell'eco) sullo stesso flusso di input. In questo caso, l'implementazione HAL sceglie quale richiesta viene accettata, tiene traccia delle richieste attive e ripristina lo stato corretto quando uno dei due processi viene disattivato.
Quando sono attivi contemporaneamente più stream di acquisizione, è possibile eseguire richieste di preelaborazione diverse su stream diversi.
Le implementazioni dell'HAL e del sottosistema audio devono consentire di applicare pre-elaborazione diversa a stream diversi, anche se condividono lo stesso dispositivo di input. In altre parole, la pre-elaborazione deve essere applicata dopo il demuxing degli stream dall'origine di acquisizione principale.
Se non è possibile per motivi tecnici su un determinato sottosistema audio, l'HAL audio deve applicare regole di priorità simili a quelle elencate in Selezione dei dispositivi.
Chiamata vocale e acquisizione simultanee dall'AP
La cattura dall'AP può avvenire mentre è attiva una chiamata vocale. Questa situazione non è nuova in Android 10 e non è direttamente correlata alla funzionalità di acquisizione simultanea, ma è utile menzionare le linee guida per questo scenario.
Durante una chiamata sono necessari due diversi tipi di acquisizioni dall'AP.
- Acquisizione dei percorsi di trasmissione e ricezione delle chiamate
- Acquisizione da un dispositivo di input (ad es. microfono integrato)
Acquisisci RX e TX delle chiamate
L'acquisizione di RX e TX delle chiamate viene attivata dall'uso della sorgente audio AudioSource.VOICE_UPLINK
o AudioSource.VOICE_DOWNLINK
e/o del dispositivo AudioDevice.IN_TELEPHONY_RX
.
Gli HAL audio devono essere esposti sul profilo di input (mixPort
del ruolo sink
)
con una route disponibile dal dispositivo AudioDevice.IN_TELEPHONY_RX
.
Quando una chiamata è collegata (la modalità audio è AudioMode.IN_CALL
), dovrebbe essere possibile avere almeno uno stream di acquisizione attivo dal dispositivo AudioDevice.IN_TELEPHONY_RX
.
Acquisisci dai dispositivi di input quando è attiva una chiamata
Quando una chiamata è attiva (la modalità audio è AudioMode.IN_CALL
), dovrebbe essere possibile aprire e attivare gli stream di input dall'AP come specificato nella sezione Attività simultanea degli stream di input dell'AP.
Tuttavia, la priorità per la selezione e la preelaborazione dei dispositivi deve sempre essere determinata dalla chiamata vocale nel caso in cui si verifichi un conflitto con le richieste degli stream di input dell'AP.
Acquisizione simultanea da DSP e AP
Quando il sottosistema audio contiene un DSP che supporta funzioni di rilevamento di hotword o contesto audio a basso consumo, l'implementazione deve supportare la cattura simultanea dall'AP e dal DSP audio.
Sono inclusi sia i dati acquisiti dal DSP durante la fase di rilevamento iniziale sia quelli acquisiti dall'AP con AudioSource.HOTWORD
dopo l'attivazione del rilevamento da parte del DSP.
Questo dovrebbe essere riflesso dal flag di acquisizione simultanea segnalato dall'HAL di attivazione tramite suono tramite il descrittore di implementazione: ISoundTriggerHw.Properties.concurrentCapture = true
.
L'HAL audio deve anche esporre e inserire un profilo specifico per l'acquisizione della hotword identificata dalla segnalazione AudioInputFlag.HW_HOTWORD
. L'implementazione deve supportare l'apertura e l'attivazione di un numero di stream su questo profilo almeno uguale al numero di modelli audio che possono essere caricati contemporaneamente dall'HAL di attivazione audio.
La cattura da questo profilo di input dovrebbe essere possibile mentre sono attivi altri profili di input.
Implicazioni per le implementazioni dell'assistente
Requisiti relativi all'utilizzo dei dati e alla notifica agli utenti
Poiché l'utilizzo simultaneo del microfono, se abusato, può comportare la fuga di dati privati dell'utente, è necessario che le seguenti condizioni e garanzie vengano applicate alle app precaricate con privilegi che richiedono di avere il ruolo di assistente.
- I dati raccolti tramite il microfono non devono uscire dal dispositivo, a meno che l'utente non stia interagendo con l'assistente. ad esempio dopo l'attivazione della hotword.
- Le applicazioni che ascoltano contemporaneamente devono fornire all'utente degli indicatori visivi dopo il rilevamento della hotword. In questo modo, gli utenti comprendono che le conversazioni successive avverranno tramite un'altra app, come l'assistente.
- Gli utenti devono avere la possibilità di disattivare il microfono o gli attivatori dell'assistente.
- Quando le registrazioni audio vengono archiviate, gli utenti devono avere la possibilità di accedervi, esaminarle ed eliminarle in qualsiasi momento.
Miglioramenti funzionali per Android 10
Gli assistenti non si bloccano a vicenda
Su Android 9 o versioni precedenti, se sul dispositivo sono presenti due assistenti sempre attivi, solo uno potrebbe ascoltare la hotword. Di conseguenza, è stato necessario passare da un assistente all'altro. In Android 10, l'assistente predefinito può ascoltare contemporaneamente l'altro assistente. Ciò si traduce in un'esperienza molto più fluida per gli utenti che dispongono di entrambi gli assistenti.
App che mantengono aperto il microfono
Quando app come Shazam o Waze mantengono aperto il microfono, l'assistente predefinito può comunque ascoltare la hotword.
Per le app di assistenza non predefinite, il comportamento non cambia su Android 10.
Esempio di implementazione dell'HAL per l'audio
Un esempio di implementazione di HAL audio conforme alle linee guida riportate in questo documento è disponibile in AOSP.