Une fois, assis sur YouTube, à la recherche de mélodies éducatives intéressantes, je suis tombé sur des vidéos avec Synthesia, dont certaines m'ont vraiment plu, j'ai décidé de télécharger et d'apprendre ... =) Mais hélas, il s'est avéré qu'il y avait des vidéos, mais personne ne voulait télécharger des fichiers midi = (
Aller sur Google a dĂ©cidĂ© de voir s'il y avait des solutions toutes faites qui me conviendraient, mais hĂ©las, du fait que j'ai trouvĂ© qu'il n'y avait que des convertisseurs audio en midi, ce qui m'a un peu bouleversĂ© ... Sans y rĂ©flĂ©chir Ă deux fois, j'ai dĂ©cidĂ© qu'il suffirait de restaurer la frĂ©quence d'images MIDI dans les clips vidĂ©o ..., et j'ai dĂ©cidĂ© d'essayer de mettre en Ćuvre cette entreprise ....
Je ne voulais pas tout Ă©crire Ă partir de zĂ©ro, car j'ai dĂ©cidĂ© de ce que je ferais sur les composants prĂȘts Ă l'emploi que me fournit Debian GNU / Linux, Ă partir desquels python Ă©tait le mieux adaptĂ©.
Au dĂ©but de la mise en Ćuvre, j'ai dĂ©cidĂ© d'utiliser des images prĂȘtes Ă l'emploi (extraites de clips vidĂ©o), mais aprĂšs les premiers tĂ©lĂ©chargements, j'ai rĂ©alisĂ© que cela n'avait aucun sens ... OpenCV (je voulais le ressentir depuis longtemps), il s'est avĂ©rĂ© que OpenCV fonctionne trĂšs bien avec le flux vidĂ©o, offrant toutes les fonctions dont j'ai besoin (compter un pixel, afficher des cadres et du texte).
Par exemple, l'ouverture d'un fichier vidĂ©o et la rĂ©ception d'une image peuvent ĂȘtre dĂ©crites en deux lignes:
vidcap = cv2.VideoCapture('test.mp4') success,image = vidcap.read()
Et si vous le souhaitez, vous pouvez immédiatement vider les cadres sur la vis:
cv2.imwrite("/tmp/frame%d.jpg" % frame, image)
AprÚs un certain temps, j'ai écrit une fonction pour générer les positions des touches du clavier virtuel, et les afficher (sous la forme de rectangles) au-dessus de l'image de flux et télécharger l'image, ce qui s'est avéré:

Donc, ayant décidé que, image par image, lors de la lecture de l'image du flux vidéo, je lirai les notes actives à partir de la position des touches virtuelles (seules les notes dont les pixels coïncident avec la couleur de référence ou non loin de celle-ci) sont considérées comme actives et les enverront en midi. Je ne pouvais pas simplement enregistrer des notes, comme si la situation était sur un clavier midi normal, c'est juste un peu plus facile ... J'ai vérifié sur la vidéo, j'ai vu combien de notes j'ai eues (et il y en avait beaucoup) je ne pensais pas mal, tout ce que j'avais à faire était de trouver comment écrire des notes dans un fichier, en cherchant un peu , a trouvé un excellent package python-midiutil python. AprÚs un certain temps, j'ai pu enregistrer des notes en midi. Il s'est avéré que python-midiutil est un sachet trÚs simple et trÚs convivial. Par exemple, la création d'un fichier et l'ajout de notes se fait en quelques lignes:
mf.addTrackName(track, time, "Sample Track") mf.addTempo(track, time, 60 ) mf.addNote(track, channel, pitch, keytime, duration, volume) with open(outputmid, 'wb') as outf: mf.writeFile(outf)
Le tĂ©lĂ©chargement du midi rĂ©sultant dans LMMS s'est avĂ©rĂ© ĂȘtre un succĂšs. Tout d'abord, j'ai restaurĂ© quelques-unes de mes chansons prĂ©fĂ©rĂ©es. Ensuite, il est devenu clair que la fonction de gĂ©nĂ©ration de positions clĂ©s n'Ă©tait pas trĂšs pratique d'un rouleau Ă l'autre, leur emplacement a changĂ©, j'ai dĂ©cidĂ© que je ferais une interface graphique, j'en ai fait une simple, mais avec une fonction de placement des clĂ©s

Je pense que ce programme peut ĂȘtre utile Ă beaucoup, car j'ai tout postĂ© sur le github