Acquisizione simultanea

Android 10 migliora l'esperienza utente che richiede l'esecuzione simultanea di più acquisizioni audio attive, ad esempio se l'utente vuole controllare una chiamata VoIP o un registratore video con i comandi vocali forniti da un servizio di accessibilità.

Il framework audio implementa il criterio che consente solo a determinate app con privilegi di eseguire l'acquisizione contemporaneamente alle app normali.

Il criterio di concorrenza viene implementato silenziando l'audio acquisito anziché impedendo a un'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 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 più stream di input attivi contemporaneamente, anche se in alcuni casi solo uno stream fornisce audio non silenzioso a un client attivo.

Requisiti CDD

Per i requisiti per il supporto dell'acquisizione simultanea, consulta il CDD.

Situazioni di acquisizione 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 pre-elaborazione.

La concorrenza può verificarsi tra:

  • Più stream di input dal processore dell'applicazione (AP)
  • Stream di input e una chiamata vocale
  • Stream di input e un DSP audio che implementa il rilevamento di hotword a basso consumo energetico

Attività simultanea degli stream di input AP

Il file di configurazione della policy audio audio_policy_configuration.xml viene utilizzato dal framework audio per determinare il numero di stream di input che possono essere aperti e attivi contemporaneamente.

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

Selezione del dispositivo

Quando più client attivi sono collegati allo stesso stream di input HAL, il framework seleziona il dispositivo appropriato per questo stream 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 a stream diversi di acquisire da dispositivi diversi, ad esempio cuffie Bluetooth e microfono integrato.

Se si verifica un'incompatibilità (ad esempio, due dispositivi condividono la stessa interfaccia audio digitale o lo stesso backend), 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 lo stesso scenario viene ripetuto.
  • Al termine dello stato di concorrenza, lo stream attivo rimanente deve essere instradato al dispositivo inizialmente richiesto su questo stream.

Se l'HAL audio definisce un ordine di priorità tra i casi d'uso attivi, segui lo stesso ordine che trovi in source_priority() in frameworks/av/services/audiopolicy/common/include/policy.h

Selezione della pre-elaborazione

Il framework audio può richiedere la pre-elaborazione su uno stream di input utilizzando i metodi HAL addEffect() o removeEffect().

Per la pre-elaborazione su un determinato stream di input, il framework audio abilita solo la configurazione corrispondente al caso d'uso attivo con la priorità più alta sullo stream di input. Tuttavia, potrebbe verificarsi una sovrapposizione durante l'attivazione e la disattivazione del caso d'uso, causando l'esecuzione simultanea di due processi attivi (ad esempio, due istanze di cancellatore di eco) sullo stesso stream di input. In questo caso, l'implementazione HAL sceglie la richiesta accettata, tiene traccia delle richieste attive e ripristina lo stato corretto quando uno dei due processi viene disattivato.

Quando più stream di acquisizione sono attivi contemporaneamente, è possibile che vengano eseguite richieste di pre-elaborazione diverse su stream diversi.

Le implementazioni HAL e del sottosistema audio devono consentire l'applicazione di pre-elaborazioni diverse a stream diversi, anche se condividono lo stesso dispositivo di input. Ciò significa che la pre-elaborazione deve essere applicata dopo il demuxing degli stream dalla sorgente di acquisizione principale.

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

Chiamata vocale e acquisizione simultanea 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 tipi diversi di acquisizione dall'AP.

Acquisizione di RX e TX delle chiamate

L'acquisizione di RX e TX delle chiamate 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 esporre il profilo di input (mixPort del ruolo sink) con un percorso disponibile dal dispositivo AudioDevice.IN_TELEPHONY_RX.

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

Acquisizione da dispositivi di input quando una chiamata è attiva

Quando una chiamata è attiva (la modalità audio è AudioMode.IN_CALL), deve essere possibile aprire e attivare gli stream di input dall'AP come specificato nella sezione Attività simultanea degli stream di input AP.

Tuttavia, la priorità per la selezione del dispositivo e la pre-elaborazione deve sempre essere determinata dalla chiamata vocale in caso di conflitto con le richieste degli stream di input AP.

Acquisizione simultanea da DSP e AP

Quando il sottosistema audio contiene un DSP che supporta le funzioni di rilevamento di hotword o contesto audio a basso consumo energetico, l'implementazione deve 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.

Questo deve essere indicato dal flag di acquisizione simultanea segnalato dall'HAL di attivazione audio tramite il descrittore di implementazione: ISoundTriggerHw.Properties.concurrentCapture = true.

L'HAL audio deve anche esporre un profilo di input specifico per l'acquisizione di hotword identificato dal flag AudioInputFlag.HW_HOTWORD. L'implementazione deve supportare l'apertura e l'attivazione di un numero di stream su questo profilo almeno pari al numero di modelli audio che possono essere caricati simultaneamente dall'HAL di attivazione audio.

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

Implicazioni per le implementazioni dell'assistente

Requisiti relativi all'utilizzo dei dati e alle notifiche utente

Poiché l'utilizzo simultaneo del microfono, se utilizzato in modo improprio, può causare la perdita 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 lasciare il dispositivo, a meno che l'utente non stia interagendo con l'assistente. Ad esempio, dopo l'attivazione dell'hotword.
  • Le applicazioni che ascoltano simultaneamente devono fornire indicazioni visive all'utente dopo il rilevamento dell'hotword. In questo modo, gli utenti capiscono che le conversazioni successive avverranno tramite un'app diversa, ad esempio 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

Assistenti che non si bloccano a vicenda

Su Android 9 o versioni precedenti, quando sul dispositivo sono presenti due assistenti sempre attivi, solo uno di essi poteva ascoltare la propria hotword. Di conseguenza, era necessario passare da un assistente all'altro. In Android 10, l'assistente predefinito può ascoltare contemporaneamente l'altro assistente. In questo modo, l'esperienza degli utenti con entrambi gli assistenti è molto più fluida.

App che tengono aperto il microfono

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

Per le app dell'assistente non predefinite, il comportamento non cambia in Android 10.

Esempio di implementazione dell'HAL audio

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