À partir d'Android 11, les fabricants d'appareils ont la possibilité pour associer et activer automatiquement des effets audio spécifiques lorsqu'un appareil audio pour la capture ou la lecture audio. L'une des principales améliorations est l'insertion d'effets audio sur un chemin audio entièrement implémenté sous le HAL audio (connexion directe entre une entrée un appareil et un périphérique de sortie) peuvent être contrôlés par le framework des effets audio.
Cette fonctionnalité est principalement destinée aux OEM du secteur automobile, mais peut également être utilisée sur d'autres appareils Android. facteurs de forme. Une application exemple insère un effet d'amélioration vocale sur le tuner FM. quand on est directement connecté au haut-parleur via le DSP audio.
Prérequis
- Comme pour tout autre effet audio, l'effet doit être implémenté par une bibliothèque du fournisseur et indiqué
dans le fichier de configuration
audio_effects.xml
. - L'effet doit être de type prétraitement ou post-traitement
(indicateur
TYPE_PRE_PROC
ouTYPE_POST_PROC
défini dansEffectDescriptor.flags
). - Si l'implémentation de l'effet est accélérée par le matériel
(indicateur
HW_ACC_TUNNEL
défini dansEffectDescriptor.flags
), elle peut être reliée à un chemin audio entièrement connecté sous le HAL (pas de lecture ou d'enregistrement d'un flux audio ouvert au niveau du HAL audio).
Créer et activer un effet au niveau de l'appareil
Vous pouvez instancier des effets audio spécifiques à l'appareil à l'aide de l'une des deux méthodes ci-dessous.
Utiliser un fichier de configuration d'effets audio
Cette méthode permet de créer un effet audio statique qui est systématiquement associé et activé sur n'importe quel chemin audio sélectionnant un appareil spécifié comme récepteur ou source.
Pour ce faire, ajoutez une section spécifique dans audio_effects.xml
.
comme suit:
<deviceEffects> <devicePort type="AUDIO_DEVICE_IN_BUILTIN_MIC" address="bottom"> <apply effect="agc"/> </devicePort> </deviceEffects>
Utiliser une API système
Un nouveau constructeur @SystemApi a été ajouté au
<ph type="x-smartling-placeholder"></ph>
android.media.audiofx.AudioEffect
pour créer et activer un effet sur les appareils:
AudioEffect(@NonNull UUID uuid, @NonNull AudioDeviceAttributes device);
Une fois l'effet créé, en spécifiant l'ID unique de l'effet audio et le descripteur de l'appareil audio, Vous pouvez l'activer ou le désactiver avec les API AudioEffect existantes.
Une API permet également de déterminer si une implémentation prend en charge une combinaison appareil/effet donnée.
static boolean isEffectSupportedForDevice( @NonNull UUID uuid, @NonNull AudioDeviceAttributes device);
Nouvelles API HAL
Effet audio HAL
L'effet audio HAL V6.0 a une nouvelle signature pour la méthode createEffect()
permettant de créer un effet associé à un appareil:
IEffectFactory::createEffect(Uuid uid, AudioSession session, AudioIoHandle ioHandle, AudioPortHandle device)
- La valeur
AudioSession
spécifiée doit êtreAudioSessionConsts.DEVICE
. AudioIoHandle
est ignoré sisession
estAudioSessionConsts.DEVICE
- Le
device
est identifié par sonAudioPortHandle
unique attribué par le framework audio lorsque l'appareil est sélectionné à le HAL audio avec la méthodeIDevice::createAudioPatch()
.
HAL audio
Pour prendre en charge la fonctionnalité d'effet d'appareil, le HAL audio doit implémenter le routage audio
à l'aide de l'API IDevice::createAudioPatch()
. Ceci est indiqué par
IDevice::supportsAudioPatches()
méthode de reporting true
.
Deux nouvelles méthodes d'API :
IDevice::addDeviceEffect(AudioPortHandle device, uint64_t effectId)
et
IDevice::removeDeviceEffect(AudioPortHandle device, uint64_t effectId)
indiquer à l'implémentation HAL qu'un effet d'appareil a été activé ou désactivé sur
sur un appareil donné.
L'appareil est identifié par son ID AudioPortHandle
, qui est utilisé lorsqu'un
le correctif est créé avec la méthode IDevice::createAudioPatch()
.
Les API Audio HAL peuvent être utilisées par une implémentation si une coordination est nécessaire entre les les contenus audio et les HAL des effets lorsqu'un effet est activé ou désactivé.