Défis Midi

Sur cette page nous allons découvrir comment ouvrir, manipuler et créer nos propres fichiers midi et lire des sons sur google colab.

Sur ce site, bitmidi.com, tu peux trouver plein de fichiers midi. Tu auras besoin de télécharger un fichier de ton choix pour réaliser les défis.

Les défis sont organisés en plusieurs parties :

Pour bien réussir ces défis, tu auras besoin de ces fiches ressources :

Installation et lecteur audio

Défi 0 : Installation du logiciel et des librairies

Suis le petit tutoriel d’installation de Fluidsynth et Prettymidi que tu trouveras sur cette page du site ressources.

Cela peut prendre quelques minutes, profites en si ce n’est pas déjà fait, pour choisir le morceau que tu utiliseras pour la suite.

Défi 0bis : Écoute un morceau de musique

  1. Télécharge le fichier midi de ton choix depuis ce site https://bitmidi.com/ et importe-le sur ton fichier colab.
  2. Récupère le code du lecteur de fichier audio sur cette page du site ressources.
  3. Importe la librairie pretty_midi et ouvre le fichier avec la fonction pretty_midi.PrettyMidi()
  4. Écoute ton morceau avec la fonction display_audio() que tu as importé précédemment.

Si tout marche bien tu dois avoir un lecteur semblable à celui-ci qui apparaît

Lire et écrire un fichier midi

Défi 1 : Liste les instruments et affiche leur noms complets

Affiche les instruments contenu dans l’attribut instruments.
Pour chaque instrument affiche l’objet complet et le nom de référence de l’instrument

Voici la liste des instruments disponibles pour créer tes fichiers midi :
https://soundprogramming.net/file-formats/general-midi-instrument-list/

Attention les percussions ne possèdent pas toutes les notes de la gamme et sont donc à proscrire.

Défi 2 : Récupère le détail d’un instrument

Affiche le détail d’un instrument. Pour cela, sers toi de l’appel en liste python pour accéder aux index.

Puis utilise la fonction program_to_instrument_name(instrument.program)

Défi 3 : Récupère les notes de cet instrument

Affiche les notes de cet instrument. Utilise la fonction instrument.notes de pretty midi. Stocke les dans une variable et affiche les.

Défi 4 : Récupère une seule note de cet instrument

Affiche une note parmi les notes de cet instrument. Pour cela, sers toi de l’appel en liste python pour accéder aux index, en utilisant toujours la fonction instrument.notes de pretty midi

Tu peux tester plusieurs notes différentes.

Défi 5 : Affiche le nom de la note

Affiche le nom de la note anglaise à l’aide de la fonction note_number_to_name()

Défi 6 : Affiche les 10 premières notes

Affiche les 10 premières notes en utilisant la liste python, comme tu l’as fait jusque là. L’index doit être défini comme « jusqu’à 10 » 

Défi 7 : Créé un fichier midi avec une note

  • Pour cela, créé une note en mettant une valeur à chaque attribut
  • Créer ton instrument en te servant de ce lien pour choisir celui que tu souhaites utiliser : Instruments MIDI
  • Ajoute la note à ton instrument
  • Créé le fichier midi et ajoute l’instrument à ce fichier grâce à la fonction .append
  • Enregistre ton son et affiche le lecteur audio pour écouter le résultat

Midi et pandas

Défi 8 : Transformation du morceau en un tableau pandas

Afin de pouvoir manipuler les notes facilement on va les transformer en dataframe pandas.

Pour cela, créer une fonction midi2pandas() en utilisant cette page.

Défi 9 : Affiche les 10 premières lignes de ton dataframe

Pour afficher les 10 premières lignes de ton tableau, appelle ta fonction midi2pandas() en la stockant dans une variable. 
Sers toi ensuite de la fonction head() de pandas.

Pour les fonctions pandas comme le head(), utilise la ressource associée.

Défi 10 : Trie la sortie des notes dans l’ordre chronologique

Si tu regardes bien le résultat que tu obtiens dans le défi 9, il est possible qu’en analysant la colonne start et end, tes notes ne se suivent pas, et soient dans le désordre par rapport à la mélodie de base.

Pour s’assurer d’afficher les notes dans l’ordre de la mélodie, utilise la méthode sort_values() de pandas pour les trier à partir de l’attribut start

Affiche à nouveau les 10 premières notes pour voir si elles sont bien dans l’ordre chronologique.

Défi 11 : Afficher un rouleau de piano

Les rouleaux de piano étaient un moyen populaire de reproduire de la musique avant les enregistrements sonores et des technologies modernes. Ce sont des rouleaux de papier perforé avec des trous disposés de manière spécifique pour jouer de la musique automatiquement sur le piano.

La librairie matplotlib permet de générer un rouleau de piano sous forme de graphisme, retraçant les points d’entrées et de sorties des notes, et sa disposition sur la largeur du graphe.

Affiche le rouleau de piano de ton fichier MIDI choisi, à l’aide de cette page.

Tu dois obtenir ce résultat :

Défi 12 : Afficher les 50 premières notes dans ton rouleau de piano

Reprends le code de ton défi 11 et ajoute un compteur dans ta fonction.

Pour cela :

  • Créer dans ta fonction une condition ajoutant un titre à ton graphe si il y a un compteur.
    • Demande lui d’afficher en titre « les xx premières notes » si tu notifies un compteur en appelant ta fonction, sinon affiche « le morceau entier ».
  • Ajoute ton compteur sur tes axes lors de la création de ta courbe
  • Appelle ta fonction en ajoutant 50 au paramètre compteur

Tu peux continuer à t’aider de cette page.

Retour en haut