Reformatage des données audio du moteur audio de bas niveau - Conversion de fréquence d'échantillonnage et de profondeur de bits

Aug 17 2020

Tout d'abord, il semble y avoir un petit nombre de tutoriels de programmation audio de bas niveau, donc si quelqu'un connaît de bonnes ressources, je serais très reconnaissant. Passons maintenant au sujet actuel!

J'utilise WASAPI pour le moteur audio que j'essaie de développer et j'ai des difficultés à reformater les données de fichiers audio lus dans un format que le périphérique audio est prêt à recevoir. Plus précisément, je me demande comment convertir à la volée le taux d'échantillonnage et la profondeur de bits d'un fichier audio lu dans le format demandé de l'appareil. J'ai vu un exemple où l'interpolation linéaire était utilisée, mais j'ai lu ailleurs qu'un tel filtre introduit trop d'artefacts tels que l'aliasing, donc encore une fois je me demande quels seraient les algorithmes pratiques pour reformater des données audio dans une application en temps réel.

Réponses

1 hotpaw2 Aug 17 2020 at 15:44

L'interpolation Sinc n'introduit aucun artefact d'aliasing aux données qui étaient à l'origine correctement limitées en bande avant l'échantillonnage. (Mais doit être légèrement modifié, car un noyau Sinc ou Dirichlet a une durée infinie.)

Une référence canonique sur les raisons pour lesquelles la reconstruction fonctionne et comment interpoler est ici: https://ccrma.stanford.edu/~jos/resample/

J'ai une implémentation simple en Basic ici: http://www.nicholson.com/rhn/dsp.html#3

L'autre méthode courante est le suréchantillonnage du rapport entier filtré passe-bas suivi d'un sous-échantillonnage du rapport entier filtré passe-bas des deux rapports appropriés. Une autre méthode courante consiste à générer une banque de filtres FIR polyphasés (de plusieurs phases de noyaux d'interpolation Sinc fenêtrés (ou de filtres FIR optimisés). Une autre méthode courante consiste à utiliser des interpolateurs polynomiaux de chacune des bosses du noyau Sinc, résultant en une banque de filtres Farrow. .

Vous devez transporter suffisamment de bits de valeurs intermédiaires arithmétiques afin de maintenir votre plancher de bruit de quantification en dessous de vos spécifications.