Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Efectos de audio

A partir de Android 11, los fabricantes de dispositivos tienen la capacidad de conectar y habilitar automáticamente efectos de audio específicos cuando se selecciona un dispositivo de audio determinado para la captura o reproducción de audio. Una mejora importante es que los efectos de audio insertados en una ruta de audio completamente implementada debajo de la HAL de audio (conexión directa entre un dispositivo de entrada y un dispositivo de salida) se pueden controlar mediante el marco de efectos de audio.

Esta función está dirigida principalmente a fabricantes de equipos originales (OEM) de automóviles, pero también se puede utilizar en otros factores de forma de Android. Una aplicación de ejemplo está insertando un efecto de mejora de voz en la salida del sintonizador de FM cuando se conecta directamente al altavoz a través del DSP de audio.

Prerrequisitos

  • Como para cualquier otro efecto de audio, el efecto debe ser implementada por una biblioteca de proveedores y aparece en la audio_effects.xml archivo de configuración.
  • El efecto debe ser de preprocesamiento tipo o postprocesado (bandera TYPE_PRE_PROC o TYPE_POST_PROC conjunto en EffectDescriptor.flags ).
  • Si la implementación efecto es HW acelerado (bandera HW_ACC_TUNNEL set en EffectDescriptor.flags ), que se puede conectar a una ruta de audio totalmente conectados por debajo de la HAL (sin flujo de reproducción o de captura de audio abierta en el HAL de audio).

Crear y habilitar un efecto de dispositivo

Se pueden crear instancias de efectos de audio específicos del dispositivo mediante uno de los dos métodos siguientes.

Usando un archivo de configuración de efectos de audio

Este método permite la creación estática de un efecto de audio que se adjunta y habilita sistemáticamente a cualquier ruta de audio seleccionando un dispositivo específico como receptor o fuente.

Esto se hace mediante la adición de una sección específica en el audio_effects.xml archivo de la siguiente manera:

<deviceEffects>
<devicePort type="AUDIO_DEVICE_IN_BUILTIN_MIC" address="bottom">
      	<apply effect="agc"/>
      </devicePort>
  </deviceEffects>
  

Usando una API del sistema

Un nuevo constructor @SystemApi se ha añadido a la android.media.audiofx.AudioEffect clase para crear y activar un dispositivo efecto:

AudioEffect(@NonNull UUID uuid, @NonNull AudioDeviceAttributes device);

Una vez creado el efecto mediante la especificación del ID de efecto de audio único y el descriptor del dispositivo de audio, se puede habilitar o deshabilitar con las API de AudioEffect existentes.

También hay una API disponible para consultar si una implementación admite una combinación determinada de dispositivo / efecto.

static boolean isEffectSupportedForDevice(
            @NonNull UUID uuid, @NonNull AudioDeviceAttributes device);

Nuevas API de HAL

Efecto de audio HAL

El efecto de audio HAL V6.0 tiene una nueva firma para el createEffect() método que permite la creación de un efecto unido a un dispositivo:

IEffectFactory::createEffect(Uuid uid, AudioSession session,
AudioIoHandle ioHandle, AudioPortHandle device)
  • El AudioSession especificado debe ser AudioSessionConsts.DEVICE .
  • AudioIoHandle se ignora si la session es AudioSessionConsts.DEVICE .
  • El device se identifica por su único AudioPortHandle asignado por el marco de audio cuando el dispositivo se selecciona en el HAL audio con IDevice::createAudioPatch() método.

Audio HAL

Para apoyar la función de efecto dispositivo, el HAL audio debe implementar control de encaminamiento de audio con el IDevice::createAudioPatch() API. Esto se indica por los IDevice::supportsAudioPatches() método de informe true .

Dos nuevos métodos de la API, IDevice::addDeviceEffect(AudioPortHandle device, uint64_t effectId) y IDevice::removeDeviceEffect(AudioPortHandle device, uint64_t effectId) cuentan la aplicación HAL que un efecto dispositivo ha sido activado o desactivado en un determinado dispositivo.

El dispositivo se identifica por su AudioPortHandle ID, que se utiliza cuando se crea un parche de audio con el IDevice::createAudioPatch() método.

Una implementación puede utilizar las API de HAL de audio si se necesita coordinación entre las HAL de audio y de efectos cuando un efecto está habilitado o deshabilitado.