Son

Icône HAL Audio Android

La couche d'abstraction matérielle (HAL) audio d'Android connecte les API de framework de niveau supérieur spécifiques à l'audio dans android.media au pilote audio et au matériel sous-jacents. Cette section inclut des instructions d'implémentation 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.

Architecture audio

Figure 1 : Architecture audio Android

Framework d'application
Le framework d'application inclut 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 de liaison 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 se trouve dans frameworks/base/core/jni/ et frameworks/base/media/jni.
Framework natif
Le framework natif fournit un équivalent natif au package android.media, en appelant des proxys IPC Binder pour accéder aux services spécifiques à l'audio du serveur multimédia. Le code du framework natif se trouve dans frameworks/av/media/libmedia.
IPC de classeur
Les proxys IPC de liaison facilitent la communication au-delà des limites de processus. Les proxys se trouvent 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
Le HAL définit l'interface standard que les services audio appellent et que vous devez implémenter pour que votre matériel audio fonctionne correctement. Pour en savoir plus, consultez l'interface HAL audio et les commentaires dans les fichiers *.hal du répertoire de la version HAL correspondante.
Pilote de kernel
Le pilote audio interagit avec votre matériel et l'implémentation HAL. Vous pouvez utiliser l'architecture audio Linux avancée (ALSA), Open Sound System (OSS) ou un pilote personnalisé (HAL est indépendant des pilotes).

Remarque: Si vous utilisez ALSA, nous vous recommandons d'utiliser external/tinyalsa pour la partie utilisateur du pilote en raison de sa licence compatible (la bibliothèque standard en mode utilisateur est sous licence GPL).

Audio natif Android basé sur OpenSL ES (non illustré)
Cette API est exposée dans le NDK Android et se trouve au même niveau d'architecture que android.media.