EN

Projet > Similarité musicale

En attente

Similarité musicale programmée en Python pour un projet volontaire en IUT

Explications

Générale

AudioSimilarity utilise les Mel-Frequency Cepstral Coefficients (MFCC).
Voici la liste des étapes du procédé.

  1. Récupération brute de la musique (sous la forme d'un fichier WAV) dans un tableau
  2. Création de fenêtres de 2 secondes entre coupés d'1 seconde
  3. Application du fenêtrage de hanning
  4. Calcul de la FFT : Transformée de Fourier Rapide, pour obtenir les fréquences
  5. Filtrage via un banc de (58) filtres triangulaires espacés par l'échelle de Mel
  6. Calcul de la distance de ces 57 coefficients (le premier n'est pas représentatif) entre les différentes musiques

Conseils

Je suis conscient qu'à l'heure actuelle pour la première version, les résultats sont plutôt encouragents et d'autres le sont moins. Si vous avez des conseils, informez moi, les documentations étant faibles, il est difficile de savoir si on part dans la bonne direction.

Problèmes

Le script arrive bien à trouver des musiques dont les différences sont minimes (un instrument en moins, ou une durée plus courte), mais il arrive parfois qu'il change radicalement de genre passant d'une musique rythmée à une musique plus calme et inversement.
Les problèmes possibles peuvent venir de :

  • La durée des fenêtrages (2 secondes entrecoupées d'1 seconde) trop courte ou trop longue ?
    (méthode: AudioSimilarity.AudioSimilarity.mfcc())
  • Le faite de faire la moyenne des coefficients de chaque fenêtrage, qui à mon avis fait perdre des données.
    (méthode: AudioSimilarity.AudioSimilarity.mfcc())
    Mieux vaut-il analyser à 25%, puis 50%, puis 75% de la musique, puis du coups comparer 3*57 coefficients ?
    Naît aussi le problème des blancs, le script les ignores si la totalité du fenêtrage est nul, mais s'il est rempli de 99%, il est analysé et injecté dans la moyenne.
  • 57 coefficients sont-ils suffisants ? Plus ou moins ?
    (fonction: AudioSimilarity.bankTriangular())
  • Prévilégier les graves ou les aigus sur le banc de filtres ?
    (fonction: AudioSimilarity.bankTriangular())
  • Passer plus de coefficients sur l'échelle de Mel que sur l'échelle linéaire, pour les graves par exemple ?
    (fonction: AudioSimilarity.bankTriangular())
  • Revoir comment calculer une distance entre deux musiques (actuellement la racine carrée de la somme des écarts au carré) ?
    (fonction: AudioSimilarity.distance())

Sources documentaires

J'ai tellement retourné Internet que je ne sais plus exactement quelles sources ont été utilisées. Je vais essayer comme même de les regrouper.

  • [EN] Mapping Your Music Collection (lien)
  • [FR] Implémentation d’une calculatrice vocale (lien)
  • [FR] La reconnaissance Vocale, application avec les MFCC (lien)
  • [EN] Mirage (lien)
  • [EN] Audiolab Python (lien)
Ecrit le
Chargement...