Coder un jeu musical jouable au dualo

Bonjour,

Je suis un éternel débutant en musique qui bidouille du code à ses heures perdues et je voudrais écrire un petit jeu vidéo pour m’aider à faire des progrès en musique.

Je suis un peu touche à tout, j’ai une guitare et un clavier, et puis je viens de m’offrir un dualo d’occaz.

Je voudrais écrire un jeu vidéo tout simple: le jeu joue une mélodie en midi, je l’écoute, et puis je dois la reproduire, à l’oreille, avec mon instrument.

J’utilise les tutos de gamecodeur.fr et sur leurs conseils, je bidouille mes jeux en lua/löve2d.

Pour mon jeu sonore, dans un premier temps, je voudrais simplement pouvoir jouer avec mon dualo branché comme un clavier maitre. Le jeu joue une mélodie MIDI puis se met en pause et attend que je joue les notes. Le jeu vérifie simplement que je joue les bonnes notes dans le bon ordre, en faisant abstraction du rythme.

En clair, si le fichier midi contient la mélodie de « frère jacques », le jeu vérifie simplement que je joue bien « do ré mi do, do ré mi do, mi fa sol, mi fa sol… »

(Plus tard j’aimerais pouvoir y jouer aussi avec ma guitare ou mon piano, mais ça implique de faire de la capture audio, transformer les sons capturé en notes midi… et euh… pour l’instant, écrire le code pour jouer directement en midi, c’est bien assez compliqué pour moi!)

J’ai un petit peu d’expérience en programmation, mais je débute dans l’univers du jeu vidéo… et puis le MIDI… ça a l’air tout simple comme principe, mais en fait c’est… un peu déroutant. Et la documentation est assez cryptique.

Est ce que quelqu’un ici peut m’aider?

Etape 1, je voudrais simplement réussir à écrire le bout de code qui ouvre le fichier midi, le joue en audio, et récupère l’enchainement de notes de la mélodie

Etape 2: écrire le code qui joue le son quand j’appuie sur une touche de mon dualo et compare mon enchainement de notes avec celui du fichier

Et juste ça… ben…

Si j’ai bien compris, le MIDI, c’est seulement des informations texte qui décrivent des évènements sonores, mais un fichier MIDI, en lui même, il ne contient pas de son. Si le fichier midi contient un événement 0x92 0x3D 0x78… , ça veut dire « note on », note 61 (donc C# 4), vélocité 78 , c’est bien ça?

Et mon code doit transmettre l’appel à une librairie qui va synthétiser du son, n’est ce pas?

Même chose si c’est mon dualo qui envoie l’évènement, j’imagine? Mon dualo, il va envoyer un « note on » quand j’appuie sur une touche, et un « note off » quand je relâche la touche?

D’après ce que je comprends, pour avoir du son, il me faut un synthétiseur virtuel, j’imagine que c’est une librairie?

En faisant des recherches, j’ai trouvé fluidsynth.lua, une librairie lua qui interface fluidsynth
Est ce que ça vous semble être une bonne piste? Je continue de creuser de ce côté là? Ou vous avez mieux à me recommander?

Les sons eux même, ils sont organisés dans une « sound font », c’est ça?

Le fichier midi, il contient aussi des infos sur l’instrument à utiliser n’est ce pas? Idem pour le dualo? Du coup, je dois créer une sorte de « mapping » pour dire que tel instru correspond à telle sound font?

Est ce qu’il y a des programmeurs parmi vous? Vous avez déjà codé des jeux en midi?

Je me débrouille pas trop mal pour lire l’anglais, si vous avez pas le temps de m’expliquer, peut être que vous pouvez me recommander un site qui explique comment faire? J’ai acheté le livre « the midi manual » de David Miles Huber, mais c’est pas facile à lire… vous avez d’autres ressources à recommander?

Et votre l’exquis, il va utiliser la nouvelle norme midi? Est ce qu’il y a des choses auxquelles je dois faire attention pour que mon jeu soit aussi jouable avec l’exquis?

Merci
Bruno

J’ai posté la même question sur le forum löve2d… et on m’a répondu que c’était pas simple du tout de programmer mon petit jeu tout simple…

Du coup je pense que Löve est peut être pas le bon framework. Je vais remonter d’un cran et demander sur le forum Lua directement…

J’ai vu que musescore est écrit en Qt qui est un framework C++. A votre avis, est-ce Qt est une meilleure piste pour mon petit projet?