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 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 privilegiate di acquisire 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 in un caso in cui può 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
Consulta la pagina CDD per i requisiti per il supporto dell'acquisizione simultanea.
Acquisire situazioni da 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 del pre-elaborazione.
La concorrenza può verificarsi tra:
- Diversi flussi di input dal processore dell'applicazione (AP)
- Flussi di input e una chiamata vocale
- Stream di input e un DSP audio che implementa un rilevamento di hotword a basso consumo energetico
Attività simultanea dei flussi di input 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
del 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 a diversi stream di acquisire da dispositivi diversi, ad esempio un headset Bluetooth e un 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 indirizzato 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 di un flusso di input utilizzando
i metodi HAL addEffect()
o removeEffect()
.
Per il pre-elaborazione su un determinato stream di input, il framework audio consente solo la configurazione corrispondente al caso d'uso attivo con la priorità più alta sullo stream di input. Tuttavia, potrebbe esserci una sovrapposizione durante l'attivazione e la disattivazione dello scenario d'uso, che causa 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 più flussi di acquisizione sono attivi contemporaneamente, potrebbero essere eseguite richieste di preelaborazione diverse su flussi diversi.
Le implementazioni di HAL e del sottosistema audio devono consentire l'applicazione di pre-elaborazioni diverse a stream diversi, anche se condividono lo stesso dispositivo di input. ovvero 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 del dispositivo.
Chiamata vocale e acquisizione simultanee da AP
L'acquisizione dal punto di accesso 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.
- Acquisizione dei percorsi RX e TX delle chiamate
- Acquisizione da un dispositivo di input (ad esempio, microfono integrato)
Acquisire 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 essere esposti sul profilo di input (mixPort
del ruolo sink
)
con una route 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
.
Acquisire dai dispositivi di input quando una chiamata è attiva
Quando una chiamata è attiva (la modalità audio è AudioMode.IN_CALL
), dovrebbe essere possibile
aprire e attivare i 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 il pre-elaborazione deve sempre essere determinata dalla chiamata vocale in caso di conflitto con le richieste dei flussi di input AP.
Acquisizione simultanea da DSP e AP
Quando il sottosistema audio contiene un DSP che supporta le funzioni di rilevamento del contesto audio a basso consumo o delle hotword, 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.
Ciò deve essere riflesso dal flag di acquisizione simultanea segnalato dall'HAL del trigger audio tramite
il descrittore di implementazione: ISoundTriggerHw.Properties.concurrentCapture = true
.
L'HAL audio deve anche esporre e inserire un profilo specifico per l'acquisizione dell'hotword identificata 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 contemporaneamente dall'HAL del 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 relativi all'utilizzo dei dati e alla notifica agli utenti
Poiché l'utilizzo simultaneo del microfono, se abusato, può divulgare dati privati dell'utente, è necessario che le seguenti condizioni e garanzie vengano applicate alle app precaricate privilegiate che chiedono di detenere 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 segnali visivi all'utente dopo il rilevamento della hotword. In questo modo, gli utenti capiscono che le conversazioni successive avverranno tramite un'altra app, ad esempio l'assistente.
- Gli utenti devono avere la possibilità di disattivare il microfono o i trigger dell'assistente.
- Quando le registrazioni audio vengono archiviate, gli utenti devono avere la possibilità di accedervi, rivederle ed eliminarle 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 loro potrebbe essere in ascolto della propria hotword. Pertanto, era 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 di entrambi gli assistenti.
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 per Android 10.
Esempio di implementazione di HAL audio
Un esempio di implementazione di Audio HAL conforme alle linee guida riportate in questo documento è disponibile in AOSP.