La capa de abstracción de hardware (HAL) de audio de Android conecta las APIs de framework de nivel superior, específicas del audio en android.media con el controlador y el hardware de audio 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.
Figura 1: Arquitectura de audio de Android
- Framework 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 pegamento 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 al código nativo de nivel inferior para acceder al hardware
de audio. JNI se encuentra en
frameworks/base/core/jni/yframeworks/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 multimedia.
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/libmediay comienzan con la letra "I". - Servidor multimedia
-
El servidor multimedia contiene servicios de audio, que son el código real que interactúa con tus implementaciones de HAL. El servidor multimedia se encuentra en
frameworks/av/services/audioflinger. - HAL
-
La HAL define la interfaz estándar a la que llaman los servicios de audio y que debes implementar para que tu hardware de audio funcione correctamente. Para obtener más información, consulta la interfaz de HAL de audio
y los comentarios en los archivos
*.haldel directorio de la versión de HAL correspondiente. - Controlador de 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 Sistema de Sonido Abierto (OSS) o un controlador personalizado (HAL es independiente del controlador).
Nota: Si usas ALSA, te recomendamos
external/tinyalsapara la parte del usuario del controlador debido a su licencia compatible (la biblioteca estándar de modo de usuario tiene licencia GPL). - Audio nativo de Android basado en Open SL ES (no se muestra)
- Esta API se expone como parte del NDK de Android y está en el mismo nivel de arquitectura que android.media.