Cattura simultanea

Android 10 migliora l'esperienza dell'utente che richiede più di un'acquisizione audio attiva contemporaneamente, ad esempio, se l'utente desidera controllare una chiamata VoIP o un videoregistratore con comandi vocali forniti da un servizio di accessibilità.

Il framework audio implementa la policy consentendo solo ad alcune app privilegiate di acquisire contemporaneamente alle app normali.

La politica di concorrenza viene implementata silenziando l'audio catturato anziché impedendo a un'applicazione di avviare la cattura. Ciò consente al framework di affrontare in modo dinamico i cambiamenti nel numero e nei tipi di casi d'uso di acquisizione attivi, senza impedire a un'app di avviare l'acquisizione nel caso in cui possa recuperare l'accesso completo al microfono dopo che un'altra app ha terminato l'acquisizione.

La conseguenza per l'HAL audio e il sottosistema audio è che devono supportare diversi flussi di input attivi contemporaneamente, anche se in alcuni casi solo un flusso fornisce audio non silenzioso a un client attivo.

Requisiti della CDD

Vedi CDD per i requisiti per il supporto dell'acquisizione simultanea.

Cattura situazioni dall'HAL audio

Uno scenario di acquisizione simultanea può comportare situazioni diverse in termini di numero di flussi di input attivi, selezione del dispositivo di input o configurazione di preelaborazione.

La concorrenza può verificarsi tra quanto segue:

  • Diversi flussi di input dal processore dell'applicazione (AP)
  • Flussi di input e una chiamata vocale
  • Flussi di input e un DSP audio che implementano un rilevamento hotword a bassa potenza

Attività simultanea dei flussi di input AP

Il file di configurazione della policy audio audio_policy_configuration.xml viene utilizzato dal framework audio per determinare quanti flussi di input possono essere aperti e attivi contemporaneamente.

Come minimo, l'HAL audio deve supportare almeno un'istanza di ciascun profilo di input ( mixPort del sink di ruolo) elencato nel file di configurazione aperto e attivo .

Selezione del dispositivo

Quando diversi 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ù flussi di ingresso, ciascun flusso può avere una selezione di dispositivi diversa.

Se la tecnologia è compatibile, è consigliabile che l'HAL audio e il sottosistema consentano l'acquisizione di flussi diversi da dispositivi diversi, ad esempio cuffie Bluetooth e microfono integrato.

Se c'è un'incompatibilità (ad esempio due dispositivi condividono la stessa interfaccia audio digitale o back-end) l'HAL audio deve scegliere quale flusso controlla la selezione del dispositivo.

In questo caso:

  • Lo stato risultante deve essere coerente e offrire la stessa selezione di dispositivi quando si ripete lo stesso scenario.
  • Al termine dello stato di concorrenza, il flusso attivo rimanente deve essere instradato al dispositivo inizialmente richiesto su questo flusso.

Se un ordine di priorità è definito dall'HAL audio tra i casi d'uso attivi, seguire lo stesso ordine trovato in source_priority() in frameworks/av/services/audiopolicy/common/include/policy.h

Selezione della preelaborazione

Il framework audio può richiedere la preelaborazione su un flusso di input utilizzando i metodi HAL addEffect() removeEffect() .

Per la preelaborazione su un determinato flusso di input, il framework audio abilita solo la configurazione corrispondente al caso d'uso attivo con la priorità più alta sul flusso di input. Tuttavia, potrebbero verificarsi delle sovrapposizioni durante l'attivazione e la disattivazione dei casi d'uso, causando l'esecuzione di due processi attivi simultanei (ad esempio, due istanze di cancellatore di eco) sullo stesso flusso di input. In questo caso, l'implementazione dell'HAL sceglie quale richiesta accettare; tiene traccia delle richieste attive e ripristina lo stato corretto quando uno dei processi è disabilitato.

Quando più flussi di acquisizione sono attivi contemporaneamente, diverse richieste di preelaborazione potrebbero essere eseguite su flussi diversi.

Le implementazioni dell'HAL e del sottosistema audio dovrebbero consentire l'applicazione di pre-elaborazione diverse a flussi diversi, anche se condividono lo stesso dispositivo di input. Cioè, la pre-elaborazione dovrebbe essere applicata dopo aver demuxizzato i flussi dalla fonte di acquisizione primaria.

Se ciò non è possibile per motivi tecnici su un determinato sottosistema audio, l'HAL audio dovrebbe applicare regole di priorità simili a quelle elencate in Selezione del dispositivo .

Chiamata vocale simultanea e acquisizione da AP

L'acquisizione 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 acquisizione dall'AP.

Cattura la chiamata RX e TX

L'acquisizione delle chiamate RX e TX viene attivata dall'utilizzo 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 sink di ruolo) con un percorso disponibile dal dispositivo AudioDevice.IN_TELEPHONY_RX .

Quando una chiamata è connessa (la modalità audio è AudioMode.IN_CALL ), dovrebbe essere possibile avere almeno un flusso di acquisizione attivo dal dispositivo AudioDevice.IN_TELEPHONY_RX .

Cattura dai dispositivi di input quando una chiamata è attiva

Quando una chiamata è attiva (la modalità audio è AudioMode.IN_CALL ), dovrebbe essere possibile aprire e attivare flussi di input dall'AP come specificato nella sezione Attività simultanea dei flussi di input dell'AP .

Tuttavia, la priorità per la selezione del dispositivo e la pre-elaborazione dovrebbe essere sempre determinata dalla chiamata vocale nel caso in cui vi sia un conflitto con le richieste provenienti dai flussi di input dell'AP.

Acquisizione simultanea da DSP e AP

Quando il sottosistema audio contiene un DSP che supporta il contesto audio a bassa potenza o le funzioni di rilevamento di hotword, l'implementazione dovrebbe supportare l'acquisizione simultanea dall'AP e dal DSP audio. Ciò include sia l'acquisizione da parte del DSP durante la fase di rilevamento iniziale sia l'acquisizione da parte dell'AP con AudioSource.HOTWORD dopo che il rilevamento è stato attivato dal DSP.

Ciò dovrebbe riflettersi nel flag di acquisizione simultanea riportato dall'HAL del trigger audio tramite il descrittore di implementazione: ISoundTriggerHw.Properties.concurrentCapture = true .

L'HAL audio deve inoltre esporre e inserire il profilo specifico per l'acquisizione di hotword identificato dal flag AudioInputFlag.HW_HOTWORD . L'implementazione dovrebbe supportare l'apertura e l'attivazione di un numero di flussi su questo profilo almeno pari al numero di modelli audio che possono essere caricati contemporaneamente dall'HAL di trigger audio.

L'acquisizione da questo profilo di input dovrebbe essere possibile mentre sono attivi altri profili di input.

Implicazioni per le implementazioni dell'Assistente

Requisiti sull'utilizzo dei dati e sulla notifica all'utente

Poiché l'utilizzo simultaneo del microfono, se abusato, può far trapelare i dati privati ​​dell'utente, è necessario che le seguenti condizioni e garanzie siano applicate alle app precaricate con privilegi che chiedono di ricoprire il ruolo di Assistente.

  • I dati raccolti tramite il microfono non devono lasciare il dispositivo a meno che l'utente non interagisca con l'Assistente. Ad esempio, dopo l'attivazione della hotword.
  • Le applicazioni in ascolto simultaneo dovrebbero fornire segnali visivi all'utente dopo il rilevamento della hotword. Ciò aiuta gli utenti a capire che ulteriori conversazioni passerebbero attraverso un'app diversa, come l'Assistente.
  • Gli utenti dovrebbero avere la possibilità di disattivare il microfono o i trigger dell'Assistente.
  • Quando le registrazioni audio vengono archiviate, gli utenti dovrebbero avere la possibilità di accedere, rivedere ed eliminare le registrazioni in qualsiasi momento.

Miglioramenti funzionali per Android 10

Gli assistenti non si bloccano a vicenda

Su Android 9 o versioni precedenti, quando sul dispositivo sono presenti due assistenti sempre attivi, solo uno di essi potrebbe ascoltare la sua hotword. Pertanto, è stato necessario alternare i due assistenti. In Android 10, l'Assistente predefinito può essere in ascolto contemporaneamente all'altro Assistente. Ciò si traduce in un'esperienza molto più fluida per gli utenti con entrambi gli Assistenti.

App che tengono il microfono aperto

Quando app come Shazam o Waze tengono il microfono aperto, l'Assistente predefinito può ancora ascoltare l'hotword.

Per le app dell'Assistente non predefinite, non vi è alcun cambiamento nel comportamento per Android 10.

Esempio di implementazione dell'HAL audio

Un esempio di implementazione HAL audio conforme alle linee guida contenute in questo documento può essere trovato in AOSP .