Beat detection

Description

Bonjour,
Ce programme pour Windows qui utilise FMOD permet de détecter le tempo d'une musique en MP3, et aussi de construire une "beat line" (un tableau de la taille de la musique qui contient quelque chose quand il y a un beat et 0 ailleurs). Il y a une interface graphique SFML dont je me suis servi pour débugger.

Pour calculer le tempo, je me suis inspiré en partie de ça:
http://www.flipcode.com/misc/BeatDetectionAlgorithms.pdf

En gros l'algo c'est:
On calcul à tout moment (tous les 1024 samples) l'énergie du signal. L'énergie étant la somme des échantillons au carré. (Pour une fréquence d'échantillonnage de 44100 Hertz ou Samples/seconde, 1024 samples c'est 1/43 eme de seconde et c'est quasi instantané pour l'oreille.
(La courbe verte dans l'interface)
On calcul ensuite l'énergie moyenne sur une seconde entourant chaque instant.
(La courbe bleu dans l'interface)
A chaque fois que l'énergie instantanée dépasse d'une constante * l'énergie moyenne, on a un beat probable. La constante est environ 1,3. Si la musique est bruyante ça sera un peu moins, Elle peut être variable et calculée à tout moment automatiquement avec un calcul de variance mais je ne l'ai pas fais ici.
(Les rectangles blancs dans l'interface)
Après on comptabilise les espaces de temps entre tous ces beats probables et celui qui revient le plus souvent nous donne le tempo.
Ensuite on peut faire une convolution avec un train d'impulsion de quelques secondes et de la même fréquence que le tempo trouvé, Ça permet de rester « sur les rails » quand il y a des pauses par exemple.
(La courbe jaune dans l'interface)
Les pics de la convolution qui surviennent à peu près au bon tempo nous donne la Beat line
(Les traits verts foncé dans l'interface)

librairies: FMOD EX, SFML 1,6

Pour le lancer, faire un glisser-déposer d'un fichier .mp3 directement sur le .exe
Pour manœuvrer dans l'interface, les instructions sont affichées à l'exécution.

Source / Exemple :


// dans le zip

Conclusion :


voici une vidéo de ce que ca donne:
http://www.youtube.com/watch?v=jZoQ1S73Bac
La baballe qui saute c'est juste pour le fun.
Évidement je n'ai mis que des exemples qui marchent mais c'est loin d'être toujours le cas. Mais pour tout ce qui est musique énergique avec des beats réguliers, ça passe.
Si le tempo trouvé est trop rapide, il suffit des fois d'augmenter un peu la constante K_ENERGIE_RATIO, et de la baisser si c'est trop lent.
Pour que ça marche plus souvent, on peut faire plein de truc, notamment découper en plages de fréquences mais ça complexifie pas mal. A voir pour la suite.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.