La version Android 10 inclut les améliorations suivantes pour l'audio haute résolution :
- Float : les codecs et extracteurs WAV et FLAC sont mis à jour pour prendre en charge le format float (précision sans perte de 24 bits et plus). Les effets Downmix et Virtualizer sont désormais flottants. MediaPlayer (NuPlayer) autorise une précision mise à jour.
- Haute fréquence : les codecs et extracteurs WAV et FLAC sont mis à jour pour prendre en charge 192 kHz. Les effets fournis par défaut par Android sont testés pour la prise en charge de 192 kHz aux fréquences standards. Les fréquences standards autorisées sont 88,2 kHz, 96 kHz, 176,4 kHz et 192 kHz.
- Multicanal : les effets de lecture Android par défaut sont testés pour la prise en charge multicanal jusqu'à huit canaux.
- Timing : des informations sur le timing sont incluses dans l'ensemble du framework audio.
À partir d'Android 9, les améliorations suivantes ne nécessitent aucune implémentation par les partenaires :
- Le nombre de pistes de sortie client simultanées passe de 14 à 40, car les instances client limitées de
AudioTrack
posaient problème aux applications sous Android 8.x. - La mémoire client/serveur maximale passe de 4 Mo à 32 Mo (selon la mémoire totale de l'appareil) pour permettre un plus grand nombre de pistes audio haute résolution simultanées.
- Le nombre total de pistes mixées passe de 32 à 256 pour éviter la contention des ressources entre les applications et l'interface utilisateur du système.
Modifications de l'effet de sortie
Consultez Effets audio pour en savoir plus sur les modifications apportées à la version 11 d'Android.
Avant la sortie d'Android 9, le traitement de la chaîne d'effets était implémenté au format d'échantillon int16 stéréo. Cette méthode présentait plusieurs limites :
- Tous les effets de sortie forçaient la conversion des données audio à virgule flottante en int16, ce qui entraînait une perte de précision.
- Les effets de sortie ont été rejetés des récepteurs de sortie avec un nombre de canaux supérieur à deux.
Dans la version 9 d'Android, le pipeline de traitement de la chaîne d'effets est mis à niveau pour prendre en charge le format float multicanal. Points essentiels :
- Les effets logiciels Android sont déjà migrés vers le format stéréo flottant.
- Les anciens effets sont compatibles avec les adaptateurs de format, qui convertissent les valeurs float en int16 si nécessaire.
Implémenter des effets de sortie
Une implémentation de référence pour les effets de sortie est disponible sous frameworks/av/media/libeffects
.
Les partenaires qui implémentent leurs propres effets de sortie personnalisés doivent procéder comme suit pour la version 10 d'Android :
- Mettez à jour les effets de sortie pour prendre en charge le format float multicanal :
- La prise en charge du traitement Int16 n'est plus requise.
- Prend en charge les nombres de canaux de sortie de 2 à 8 (pour la compatibilité future, envisagez les nombres de 1 à 30).
- Prise en charge des nombres de canaux d'entrée correspondant aux nombres de canaux de sortie pour les effets d'insertion. Les effets auxiliaires continuent d'afficher un nombre de canaux d'entrée égal à 1 (mono).
- Compatible avec les masques de position de canal (canoniques) et les masques d'index de canal de
(1 << n) - 1
.
- Si vous devez continuer à prendre en charge les anciens effets de sortie du fournisseur et que vous ne pouvez pas les mettre à jour, validez l'ancien code comme suit :
- Les effets de sortie (insertion) de l'ancienne version doivent refuser les configurations non compatibles dans
EFFECT_CMD_SET_CONFIG
.- Vérifiez que le format est int16.
- Vérifiez que les masques des canaux d'entrée et de sortie sont stéréo.
- Si l'une des vérifications échoue, renvoyez
-EINVAL
.
- Les effets de sortie (auxiliaires) anciens sont configurés par AudioFlinger avec un masque de canal d'entrée mono et potentiellement des masques de canal de sortie multicanaux, selon que le récepteur de sortie est multicanal ou non.
Ils doivent refuser les configurations non compatibles dans
EFFECT_CMD_SET_CONFIG
.- Vérifiez que le format est int16.
- Vérifiez que le masque de canal d'entrée est mono et que celui de canal de sortie est stéréo.
- Si l'une des vérifications échoue, renvoyez
-EINVAL
.
- Validez l'ancien code. Ne partez pas du principe que cela fonctionne.
- Les effets de sortie (insertion) de l'ancienne version doivent refuser les configurations non compatibles dans