Audio haute résolution

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 (plus de 24 bits de précision sans perte). Les effets de downmix et de virtualisation sont mis à jour pour flotter. MediaPlayer (NuPlayer) permet la mise à jour de la précision.
  • Haute fréquence:les codecs et extracteurs WAV et FLAC sont mis à jour pour prendre en charge la fréquence de 192 kHz. La compatibilité des effets fournis par défaut par Android avec la fréquence de 192 kHz est testée 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 du multicanal jusqu'à huit canaux.
  • Timing:les informations de synchronisation sont incluses dans tout le 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 ont posé problème pour les 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 d'utiliser davantage de pistes audio haute résolution simultanées.
  • Le nombre total de canaux mixtes passe de 32 à 256 pour éviter les conflits de ressources entre les applications et l'UI du système.

Modifications de l'effet de sortie

Consultez la section Effets audio pour connaître les modifications apportées à la version Android 11.

Avant la version Android 9, le traitement de la chaîne d'effets était implémenté au format d'échantillon stéréo int16. Ce système 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 étaient rejetés pour les récepteurs de sortie dont le nombre de canaux était supérieur à deux.

Dans la version Android 9, 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 float stéréo.
  • Les anciens effets sont compatibles avec les adaptateurs de format, qui convertissent les nombres à virgule flottante 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 Android 10:

  • 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.
    • Prise en charge des nombres de canaux de sortie compris entre 2 et 8 (pour une compatibilité future, envisagez des nombres compris entre 1 et 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 de voir un nombre de canaux d'entrée de 1 (mono).
    • Prise en charge des masques de position de canal (canonique) et des 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, vérifiez l'ancien code comme suit :
    • Les anciens effets de sortie (insertion) 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 anciens effets de sortie (auxiliaires) sont configurés par AudioFlinger avec un masque de canal d'entrée mono et éventuellement des masques de canaux de sortie multicanaux, selon que le récepteur de sortie est multicanal ou non. Elles doivent refuser les configurations non compatibles dans EFFECT_CMD_SET_CONFIG.
      • Vérifiez que le format est int16.
      • Vérifiez que le masque du canal d'entrée est mono et que le masque du canal de sortie est stéréo.
      • Si l'une des vérifications échoue, renvoyez -EINVAL.
    • Vérifiez le code ancien. Ne partez pas du principe que cela fonctionne !