Bonjour,
Dans le cadre d'un mini-projet scientifique (TIPE pour CPGE), je me suis intéressé aux différentes méthodes de reconnaissance musicale comme Shazam. J'aimerais bien "concevoir" quelques petits programmes sur Python, avec mes quelques notions, me permettant d'illustrer l'exposé. Je vais donc tâcher de vous expliquer sommairement le principe. (Je m'appuie essentiellement sur https://360d471c148c379e7f0425504027...PhD_thesis.pdf)
La reconnaissance d'un morceau de musique à l'aide de Shazam se fait essentiellement à travers l'étude du spectre de l'échantillon source que l'on compare à une base de donnée.
Pour résumer la méthode : On part d'un sonagramme (diagramme en 3D affichant l'intensité et la fréquence du signal en fonction du temps) qui caractérise un signal donné, puis on "découpe" ce spectrogramme en carré comme ci dessus (figure b). Enfin, dans chaque carré, on relève la valeur maximale du signal dans ce domaine précis pour constituer une sorte d'empreinte audio propre à chaque échantillon, que l'on pourra plus tard comparer aux empreintes dans la base de donnée. http://prntscr.com/9vxxmf
Si j'ai bien compris (corrigez moi si je me trompe), cette comparaison d'empreinte permet à la fois une grosse économie de ressources de stockage et une complexité, au sens informatique, correcte (moins de truc à comparer, et fichier moins lourd à stocker dans la base de donnée), mais permet également une souplesse dans la reconnaissance du signal (par exemple, la présence de bruit qui peut potentiellement entravé la reconnaissance peut ne pas être gênante si le signal n'est pas trop perturbé. Si on se mettait à comparer le spectrogramme en entier, il faudrait un échantillon qui correspondent parfaitement à un fichier de la base de donnée).
Pour ma part, j'ai quelques idées de programme mais je n'ai ni les compétences, ni la documentation adéquate, pour savoir si c'est réalisable essentiellement sur Python. Les voici:
-Programme qui prendrait en entrée un échantillon audio sous forme mp3 ou autre et qui renverrait l'empreinte audio (sous forme d'une image ). Pour ça, il faudra sûrement dans un premier temps obtenir le sonagramme du signal, et je sais pas si c'est possible de faire quelque chose avec la transformée de Fourrier directement sur Python. Si c'est trop complexe, je peux toujours travailler directement sur le spectrogramme d'Audacity par exemple. Pour le reste, je pense que c’est réalisable à partir d'outils Python (découper des domaines carrés d'études, puis relever le point maximal dans chacun de ces domaines et tout flanquer dans un tableau). Le plus gros mur que je vois c'est que le spectrogramme change au cours du temps, donc j'ai pas trop d'idée sur comment appréhender la chose, et j'accepte volontiers toutes pistes ou idées de votre part.
-Programme qui permet à partir d'un fichier audio (où bien d'un sonagramme) de rentrer son empreinte audio dans une base de donnée, ou bien de la comparer avec les données présents dans la database. Malheureusement mes connaissances en MySQL sont vraiment très limités et je ne sais pas trop par où commencer.
Si jamais il y'a des connaisseurs en traitement du signal audio axé info et qui auraient le temps de m’éclaircir sur certains points noirs, je leurs en serais très reconnaissant. Je suis également ouvert à toutes suggestions.
Merci.
Partager