Audio

Ícono del HAL de audio de Android

La capa de abstracción de hardware (HAL) de audio de Android conecta las APIs del framework de nivel superior específicas del audio en android.media con el controlador de audio y el hardware subyacentes. En esta sección, se incluyen instrucciones de implementación y sugerencias para mejorar el rendimiento.

La arquitectura de audio de Android define cómo se implementa la funcionalidad de audio y apunta al código fuente pertinente involucrado en la implementación.

Arquitectura de audio

Figura 1: Arquitectura de audio de Android

Marco de trabajo de la aplicación
El framework de la aplicación incluye el código de la app, que usa las APIs de android.media para interactuar con el hardware de audio. Internamente, este código llama a las clases de vinculación de JNI correspondientes para acceder al código nativo que interactúa con el hardware de audio.
JNI
El código JNI asociado con android.media llama a código nativo de nivel inferior para acceder al hardware de audio. JNI se encuentra en frameworks/base/core/jni/ y frameworks/base/media/jni.
Framework nativo
El framework nativo proporciona un equivalente nativo al paquete android.media, que llama a los proxies de IPC de Binder para acceder a los servicios específicos de audio del servidor de medios. El código del framework nativo se encuentra en frameworks/av/media/libmedia.
IPC de Binder
Los proxies de IPC de Binder facilitan la comunicación a través de los límites del proceso. Los proxies se encuentran en frameworks/av/media/libmedia y comienzan con la letra "I".
Servidor multimedia
El servidor de medios contiene servicios de audio, que son el código real que interactúa con tus implementaciones de HAL. El servidor de medios se encuentra en frameworks/av/services/audioflinger.
HAL
El HAL define la interfaz estándar a la que llaman los servicios de audio y que debes implementar para que el hardware de audio funcione correctamente. Para obtener más detalles, consulta la interfaz de la HAL de audio y los comentarios en los archivos *.hal del directorio de la versión de la HAL correspondiente.
Controlador del kernel
El controlador de audio interactúa con tu hardware y la implementación de HAL. Puedes usar la Arquitectura Avanzada para el Sonido en Linux (ALSA), el Open Sound System (OSS) o un controlador personalizado (el HAL no depende del controlador).

Nota: Si usas ALSA, te recomendamos external/tinyalsa para la parte del usuario del controlador debido a su licencia compatible (la biblioteca estándar en modo de usuario tiene licencia GPL).

Audio nativo de Android basado en OpenSL ES (no se muestra)
Esta API se expone como parte del NDK de Android y se encuentra en el mismo nivel de arquitectura que android.media.