
La couche d'abstraction matérielle (HAL) audio d'Android connecte les API de structure spécifiques à l'audio de niveau supérieur dans android.media au pilote audio et au matériel sous-jacents. Cette section comprend des instructions de mise en œuvre et des conseils pour améliorer les performances.
L'architecture audio Android définit la manière dont la fonctionnalité audio est implémentée et pointe vers le code source pertinent impliqué dans l'implémentation.

Figure 1. Architecture audio Android
- Cadre d'application
- Le cadre de l'application comprend le code de l'application, qui utilise les API android.media pour interagir avec le matériel audio. En interne, ce code appelle les classes glue JNI correspondantes pour accéder au code natif qui interagit avec le matériel audio.
- JNI
- Le code JNI associé à android.media appelle le code natif de niveau inférieur pour accéder au matériel audio. JNI est situé dans
frameworks/base/core/jni/
etframeworks/base/media/jni
. - Cadre natif
- Le framework natif fournit un équivalent natif au package android.media , appelant les proxies Binder IPC pour accéder aux services audio spécifiques du serveur multimédia. Le code du framework natif se trouve dans
frameworks/av/media/libmedia
. - Classeur CIB
- Les proxys Binder IPC facilitent la communication au-delà des limites des processus. Les proxys sont situés dans
frameworks/av/media/libmedia
et commencent par la lettre "I". - Serveur multimédia
- Le serveur multimédia contient des services audio, qui sont le code réel qui interagit avec vos implémentations HAL. Le serveur multimédia se trouve dans
frameworks/av/services/audioflinger
. - HAL
- La couche HAL définit l'interface standard à laquelle les services audio font appel et que vous devez implémenter pour que votre matériel audio fonctionne correctement. Pour plus de détails, reportez-vous à l' interface audio HAL et aux commentaires dans les fichiers
*.hal
du répertoire de version HAL correspondant. - Pilote du noyau
- Le pilote audio interagit avec votre matériel et l'implémentation HAL. Vous pouvez utiliser Advanced Linux Sound Architecture (ALSA), Open Sound System (OSS) ou un pilote personnalisé (HAL est indépendant du pilote).
Remarque : Si vous utilisez ALSA, nous recommandons
external/tinyalsa
pour la partie utilisateur du pilote en raison de sa compatibilité de licence (la bibliothèque en mode utilisateur standard est sous licence GPL). - Audio natif Android basé sur Open SL ES (non illustré)
- Cette API est exposée dans le cadre d' Android NDK et est au même niveau d'architecture que android.media .