Captura simultánea

Android 10 mejora la experiencia del usuario que requiere que haya más de una captura de audio activa de manera simultánea. Por ejemplo, si el usuario quiere controlar una llamada VoIP o una grabadora de video con comandos de voz proporcionados por un servicio de accesibilidad.

El framework de audio implementa la política que permite que solo ciertas apps con privilegios capturen de forma simultánea con las apps normales.

La política de simultaneidad se implementa silenciando el audio capturado en lugar de evitar que una aplicación comience a capturar. Esto permite que el framework aborde de forma dinámica los cambios en la cantidad y los tipos de casos de uso de captura activa, sin evitar que una app comience a capturar en un caso en el que pueda recuperar el acceso completo al micrófono después de que otra app termine de capturar.

La consecuencia para la HAL de audio y el subsistema de audio es que deben admitir varias transmisiones de entrada activas de forma simultánea, incluso si, en algunos casos, solo una transmisión proporciona audio no silencioso a un cliente activo.

Requisitos de la CDD

Consulta la CDD para conocer los requisitos de compatibilidad con la captura simultánea.

Situaciones de captura de la HAL de audio

Un escenario de captura simultánea puede generar diferentes situaciones en términos de la cantidad de transmisiones de entrada activas, la selección del dispositivo de entrada o la configuración de preprocesamiento.

La simultaneidad puede ocurrir entre lo siguiente:

  • Varias transmisiones de entrada del procesador de aplicaciones (AP)
  • Transmisiones de entrada y una llamada de voz
  • Transmisiones de entrada y un DSP de audio que implementa una detección de palabras clave de bajo consumo

Actividad simultánea de las transmisiones de entrada de AP

El framework de audio usa el archivo de configuración de política de audio audio_policy_configuration.xml para determinar cuántas transmisiones de entrada se pueden abrir y activar de forma simultánea.

Como mínimo, la HAL de audio debe admitir al menos una instancia de cada entrada perfil (mixPort de la función sink) que aparece en el archivo de configuración abierto y activo.

Selección de dispositivos

Cuando varios clientes activos están conectados a la misma transmisión de entrada de la HAL, el framework selecciona el dispositivo adecuado para esta transmisión de entrada según la prioridad del caso de uso.

Cuando varias transmisiones de entrada están activas, cada una puede tener una selección de dispositivo diferente.

Si la tecnología es compatible, se recomienda que la HAL de audio y el subsistema permitan que diferentes transmisiones capturen desde diferentes dispositivos, como auriculares Bluetooth y micrófono integrado.

Si hay una incompatibilidad (por ejemplo, dos dispositivos comparten la misma interfaz de audio digital o backend), la HAL de audio debe elegir qué transmisión controla la selección del dispositivo.

En este caso:

  • El estado resultante debe ser coherente y ofrecer la misma selección de dispositivos cuando se repite el mismo escenario.
  • Cuando finaliza el estado de simultaneidad, la transmisión activa restante debe enrutarse al dispositivo solicitado inicialmente en esta transmisión.

Si la HAL de audio define un orden de prioridad entre los casos de uso activos, sigue el mismo orden que se encuentra en source_priority() en frameworks/av/services/audiopolicy/common/include/policy.h.

Selección de preprocesamiento

El framework de audio puede solicitar el preprocesamiento en una transmisión de entrada con los métodos addEffect() o removeEffect() de la HAL.

Para el preprocesamiento en una transmisión de entrada determinada, el framework de audio habilita solo la configuración correspondiente al caso de uso activo de mayor prioridad en la transmisión de entrada. Sin embargo, puede haber cierta superposición durante la activación y desactivación del caso de uso, lo que hace que se ejecuten dos procesos activos simultáneos (por ejemplo, dos instancias de cancelación de eco) en la misma transmisión de entrada. En este caso, la implementación de la HAL elige qué solicitud se acepta; realiza un seguimiento de las solicitudes activas y restablece el estado correcto cuando se inhabilita cualquiera de los procesos.

Cuando varias transmisiones de captura están activas de forma simultánea, es posible que se ejecuten diferentes solicitudes de preprocesamiento en diferentes transmisiones.

Las implementaciones de la HAL y el subsistema de audio deben permitir que se apliquen diferentes preprocesamientos a diferentes transmisiones, incluso si comparten el mismo dispositivo de entrada. Es decir, el preprocesamiento se debe aplicar después de la demultiplexación de las transmisiones de la fuente de captura principal.

Si no es posible por motivos técnicos en un subsistema de audio determinado, la HAL de audio debe aplicar reglas de prioridad similares a las que se indican en Selección de dispositivos.

Llamada de voz y captura simultáneas desde AP

La captura desde el AP puede ocurrir mientras una llamada de voz está activa. Esta situación no es nueva en Android 10 y no está relacionada directamente con la función de captura simultánea, pero es útil mencionar los lineamientos para este caso.

Se necesitan dos tipos diferentes de captura desde el AP durante una llamada.

Captura de RX y TX de la llamada

La captura de RX y TX de la llamada se activa con el uso de la fuente de audio AudioSource.VOICE_UPLINK o AudioSource.VOICE_DOWNLINK, o el dispositivo AudioDevice.IN_TELEPHONY_RX.

Las HAL de audio deben exponerse en el perfil de entrada (mixPort de la función sink) con una ruta disponible desde el dispositivo AudioDevice.IN_TELEPHONY_RX.

Cuando se conecta una llamada (el modo audio es AudioMode.IN_CALL), debería ser posible tener al menos una transmisión de captura activa desde el dispositivo AudioDevice.IN_TELEPHONY_RX.

Captura desde dispositivos de entrada cuando una llamada está activa

Cuando una llamada está activa (el modo audio es AudioMode.IN_CALL), debería ser posible abrir y activar transmisiones de entrada desde el AP como se especifica en la sección Actividad simultánea de las transmisiones de entrada de AP.

Sin embargo, la prioridad para la selección de dispositivos y el preprocesamiento siempre debe estar determinada por la llamada de voz en caso de que haya un conflicto con las solicitudes de las transmisiones de entrada de AP.

Captura simultánea desde DSP y AP

Cuando el subsistema de audio contiene un DSP que admite funciones de detección de palabras clave o contexto de audio de bajo consumo, la implementación debe admitir la captura simultánea desde el AP y el DSP de audio. Esto incluye la captura por parte del DSP durante la fase de detección inicial y la captura por parte del AP con AudioSource.HOTWORD después de que el DSP activa la detección.

Esto debe reflejarse en la marca de captura simultánea que informa la HAL de activación de sonido a través del descriptor de implementación: ISoundTriggerHw.Properties.concurrentCapture = true.

La HAL de audio también debe exponer y ingresar un perfil específico para la captura de palabras clave identificada por la marca AudioInputFlag.HW_HOTWORD. La implementación debe admitir la apertura y la activación de una cantidad de transmisiones en este perfil al menos igual a la cantidad de modelos de sonido que puede cargar de forma simultánea la HAL de activación de sonido.

La captura desde este perfil de entrada debería ser posible mientras otros perfiles de entrada están activos.

Implicación para las implementaciones de Asistente

Requisitos sobre el uso de datos y la notificación del usuario

Debido a que el uso simultáneo del micrófono, si se abusa de él, puede filtrar datos privados del usuario, necesitamos que se apliquen las siguientes condiciones y garantías a las apps precargadas con privilegios que solicitan tener la función de Asistente.

  • Los datos recopilados a través del micrófono no deben salir del dispositivo, a menos que el usuario interactúe con el Asistente. Por ejemplo, después de que se activa la palabra clave.
  • Las aplicaciones que escuchan de forma simultánea deben proporcionar indicadores visuales al usuario después de que se detecta la palabra clave. Esto ayuda a los usuarios a comprender que las conversaciones posteriores pasarían por una app diferente, como Asistente.
  • Los usuarios deben poder desactivar el micrófono o los activadores de Asistente.
  • Cuando se almacenan grabaciones de audio, los usuarios deben poder acceder a ellas, revisarlas y borrarlas en cualquier momento.

Mejoras funcionales para Android 10

Asistentes que no se bloquean entre sí

En Android 9 o versiones anteriores, cuando hay dos Asistentes siempre activos en el dispositivo, solo uno de ellos puede escuchar su palabra clave. Por lo tanto, era necesario cambiar entre los dos Asistentes. En Android 10, el Asistente predeterminado puede escuchar de forma simultánea con el otro Asistente. Esto genera una experiencia mucho más fluida para los usuarios con ambos Asistentes.

Apps que mantienen el micrófono abierto

Cuando apps como Shazam o Waze mantienen el micrófono abierto, el Asistente predeterminado puede seguir escuchando la palabra clave.

En el caso de las apps de Asistente no predeterminadas, no hay cambios en el comportamiento de Android 10.

Ejemplo de implementación de la HAL de audio

En AOSP, puedes encontrar un ejemplo de implementación de la HAL de audio que cumple con los lineamientos de este documento.