- Implémentation open source en Rust d’un système rapide de reconnaissance et d’identification audio inspiré de Shazam
- Conçu en mettant l’accent sur la vitesse, l’efficacité et la simplicité, avec la possibilité d’effectuer l’indexation et la recherche de fichiers audio via une CLI
Principales caractéristiques et avantages
- Vitesse élevée d’indexation et de recherche : traitement rapide de plusieurs centaines de fichiers audio possible
- Commandes CLI simples : utilisation intuitive via les commandes
index et search
- Implémentation hautes performances basée sur Rust : utilisation efficace des ressources système
- Adoption d’une méthode d’empreinte audio similaire à Shazam
Fonctionnement interne
Prétraitement (Preprocessing)
- Conversion de la stéréo en mono (moyenne des canaux gauche/droite)
- Downsampling pour réduire la charge de calcul : 44.1kHz → 11.025kHz
- Avant le downsampling, application d’un filtre passe-bas IIR pour supprimer les fréquences au-delà de la fréquence de Nyquist
Transformation en spectrogramme
- Utilisation de la Short-Time Fourier Transform (STFT)
- Fenêtre de Hamming de 1024 échantillons
- Recouvrement de 50 %
- Conversion dans le domaine temps-fréquence pour extraire les pics
- Chaque fenêtre temporelle est divisée en bandes de fréquences, et seule l’amplitude la plus élevée de chaque bande est conservée
- Les amplitudes inférieures à la moyenne sont supprimées afin de ne conserver que les pics caractéristiques
Méthode de stockage des données d’empreinte
- Les pics sont stockés sous forme de hachages
- En prenant un pic d’ancrage comme référence, les positions relatives avec les pics voisins sont stockées sous forme de tuple
- Forme
(anchor freq, peak freq, delta time)
- Conversion possible en entiers 32 bits ou 64 bits
Algorithme de recherche et de classement
- Génération d’une empreinte à partir de l’échantillon d’entrée
- Recherche des empreintes candidates dans la base de données, puis tri par ordre temporel
- Analyse de la continuité temporelle basée sur la plus longue sous-séquence croissante (Longest Increasing Subsequence)
- Recherche de la zone de pics correspondants la plus dense à l’aide d’une fenêtre glissante
- Calcul d’un score de correspondance et tri des résultats par score décroissant
Aucun commentaire pour le moment.