Conversion du taux d'échantillonnage

Cet article décrit la conversion de la fréquence d'échantillonnage, également appelée rééchantillonnage , dans Android. Pour connaître la terminologie relative à la conversion de la fréquence d'échantillonnage, voir Terminologie .

La conversion de la fréquence d'échantillonnage est le processus de modification d'un flux d'échantillons discrets d'une fréquence d'échantillonnage à un autre flux à une fréquence d'échantillonnage différente. Un convertisseur de fréquence d'échantillonnage, ou rééchantillonneur, est un module qui implémente la conversion de fréquence d'échantillonnage. En ce qui concerne le rééchantillonneur, le flux d’origine est appelé signal source et le flux rééchantillonné est appelé signal récepteur.

Les rééchantillonneurs sont utilisés à plusieurs endroits dans Android. Par exemple, un fichier MP3 peut être codé à une fréquence d'échantillonnage de 44,1 kHz mais doit être lu sur un appareil Android prenant en charge l'audio 48 kHz en interne. Dans ce cas, un ré-échantillonneur serait utilisé pour suréchantillonner l'audio de sortie MP3 d'une fréquence d'échantillonnage source de 44,1 kHz à une fréquence d'échantillonnage récepteur de 48 kHz utilisée dans l'appareil Android.

Les caractéristiques d'un rééchantillonneur peuvent être exprimées à l'aide de métriques, notamment :

  • degré de préservation de l'amplitude globale du signal
  • degré de préservation de la bande passante de fréquence du signal, sous réserve des limitations de la fréquence d'échantillonnage du puits
  • latence globale via le rééchantillonneur
  • retard de phase et de groupe cohérent par rapport à la fréquence
  • complexité de calcul, exprimée en cycles CPU ou en consommation d'énergie
  • ratios autorisés des fréquences d'échantillonnage de la source et du puits
  • possibilité de modifier dynamiquement les taux de fréquence d'échantillonnage
  • quels formats d'échantillons audio numériques sont pris en charge

Le rééchantillonneur idéal préserverait exactement l'amplitude et la bande passante de fréquence du signal source (sous réserve des limitations de la fréquence d'échantillonnage du récepteur), aurait un retard minimal et cohérent, aurait une complexité de calcul minimale, permettrait des taux de conversion arbitraires et dynamiques et prendrait en charge tous les formats d'échantillons audio numériques courants. . En pratique, les rééchantillonneurs idéaux n'existent pas car les rééchantillonneurs réels sont un compromis entre ces caractéristiques. Par exemple, les objectifs de qualité idéale entrent en conflit avec des délais courts et une faible complexité.

Android inclut une variété de rééchantillonneurs audio, afin que des compromis appropriés puissent être faits en fonction du cas d'utilisation et de la charge de l'application. Les rééchantillonneurs disponibles sont expliqués dans Implémentation du rééchantillonneur.

Implémentations du rééchantillonneur

Les implémentations de rééchantillonneur disponibles changent fréquemment et peuvent être personnalisées par les OEM. Les rééchantillonneurs par défaut, par ordre décroissant de distorsion du signal et par ordre croissant de complexité de calcul, incluent :

  • linéaire
  • cubique
  • puisque avec les coefficients originaux
  • puisque avec coefficients révisés

En général, les rééchantillonneurs sinc sont plus appropriés pour une lecture de musique de meilleure qualité, et les autres rééchantillonneurs doivent être réservés aux cas où la qualité est moins importante (un exemple pourrait être des « clics de touches » ou similaire).

L'implémentation spécifique du rééchantillonneur sélectionnée dépend du cas d'utilisation, de la charge et de la valeur de la propriété système af.resampler.quality . Pour plus de détails, consultez le code source du rééchantillonneur audio dans AudioFlinger .