Audio haute résolution

La version Android 10 inclut les améliorations suivantes pour l'audio haute résolution :

  • Float : les codecs WAV, FLAC et les extracteurs sont mis à jour pour prendre en charge float (plus de 24 bits de précision sans perte). Les effets Downmix et Virtualizer sont mis à jour pour flotter. La précision mise à jour est autorisée par MediaPlayer (NuPlayer).
  • Haute fréquence : les codecs WAV, FLAC et les extracteurs 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 standard. Les fréquences standard 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.
  • Synchronisation : les informations de synchronisation sont incluses dans tout le cadre audio.

À partir d'Android 9, les améliorations suivantes ne nécessitent aucune mise en œuvre par un partenaire :

  • Le nombre de pistes de sortie client simultanées passe de 14 à 40, car les instances client limitées d' AudioTrack ont ​​posé un problème pour les applications sous Android 8.x.
  • La mémoire client/serveur maximale passe de 4 Mo à 32 Mo (en fonction de la mémoire totale de l'appareil) pour permettre davantage de pistes audio haute résolution simultanées.
  • Le nombre total de pistes mixtes passe de 32 à 256 pour éviter les conflits de ressources entre les applications et l'interface utilisateur système.

Modifications de l'effet de sortie

Consultez Effets audio pour 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. Cela présentait plusieurs limites :

  • Tous les effets de sortie ont forcé la conversion des données audio à virgule flottante vers int16, entraînant 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 Android 9, le pipeline de traitement de la chaîne d'effets est mis à niveau pour prendre en charge le format float multicanal. Points clés:

  • Les effets du logiciel Android sont déjà migrés vers le flotteur stéréo.
  • Les effets hérités sont pris en charge avec des adaptateurs de format, qui convertissent float en int16 selon les besoins.

Implémenter les effets de sortie

Une implémentation de référence pour les effets de sortie est disponible sous frameworks/av/media/libeffects .

Les partenaires mettant en œuvre 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 flottant multicanal :
    • La prise en charge du traitement Int16 n’est plus requise.
    • Prise en charge du nombre de canaux de sortie de 2 à 8 (pour une compatibilité future, envisagez les nombres de 1 à 30).
    • Prise en charge du nombre de canaux d'entrée correspondant au nombre 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).
    • Prend en charge à la fois 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 effets de sortie des fournisseurs hérités et que vous ne pouvez pas les mettre à jour, vérifiez le code hérité comme suit :
    • Les effets de sortie (insertion) hérités doivent rejeter les configurations non prises en charge 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 ou l’autre des vérifications échoue, renvoyez -EINVAL .
    • Les effets de sortie (auxiliaires) hérités sont configurés par AudioFlinger avec un masque de canal d'entrée mono et des masques de canal de sortie potentiellement multicanaux, selon que le récepteur de sortie est multicanal ou non. Ils doivent rejeter les configurations non prises en charge 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 ou l’autre des vérifications échoue, renvoyez -EINVAL .
    • Vérifiez le code hérité. Ne présumez pas que cela fonctionne !