{{tag>format audio multimédia}} ====== MIDI ====== Vous trouverez une excellente documentation concernant le protocole MIDI en français sur [[http://linuxmao.org/MIDI+-+Les+bases?structure=Accueil+Doc|LinuxMAO]]. ===== MIDI, General MIDI et fichiers MIDI ===== Le **[[wpfr>Musical_Instrument_Digital_Interface|MIDI]]** (//Musical Instrument Digital Interface//) est un protocole permettant à des logiciels ou des machines dédiées à la musique de communiquer entre elles. Il permet par exemple de faire jouer un son à un [[:mao#synthetiseurs|synthétiseur]] ou à un [[:mao#sampleurs|sampleur]] lorsqu'on appuie sur une note d'un clavier.\\ Le MIDI trouve son application aussi bien dans le monde matériel (via des câbles spécifiques, les câbles MIDI), que dans le monde virtuel (via des "ports" ou "bus" logiciels). Le MIDI transporte des "consignes" ou des "événements" (à la manière des signes d'un chef d'orchestre ou d'une partition), il ne s'agit pas de signal audio. On parle de //messages// MIDI. Il est possible de créer des séquences MIDI qui permettent d'organiser le déclenchement d'événements dans le temps. Par exemple une suite de notes à jouer.\\ Cela ressemble donc à une partition traditionnelle : certains logiciels proposent d'ailleurs d'éditer ces séquences sous forme de partitions. Cependant ces partitions sont plus facilement lisibles par des machines que par des humains.\\ On peut enregistrer ces séquences sous forme de **fichiers MIDI** (avec l'extension ''.mid''). Ces fichiers ne contiennent donc pas de son, mais seulement une série d'instructions destinées à des machines, ce qui est beaucoup plus léger. Le MIDI tend à être (lentement) remplacé par le protocole [[https://opensoundcontrol.stanford.edu/|OSC]], plus adapté à l'informatique et aux réseaux modernes. ==== Spécification ==== Le MIDI peut envoyer plusieurs types de messages : * 128 **notes** différentes (//note on// pour le début, //note off// pour la fin), avec leurs //vélocités// (la force avec laquelle on les joue, sur 128 pas). * 128 **//control changes//** (commandes de modulation) aussi sur 128 pas. On peut contrôler tous types de paramètres : volume, panoramique, //pitch bend//, paramètre d'un effet, etc. * la **synchronisation**, afin de déclencher toutes les machines (principalement les séquenceurs) en même temps et de les garder synchronisés et les arrêter. * 128 **//program changes//** (changements de programme) pour changer de son en sélectionnant différents //presets// ou instruments… * l'**//after-touch//** qui permet avec certains claviers et contrôleurs d'envoyer en continu la force d'appui sur chaque touche pendant qu'elle est jouée * et d'autres paramètres assez techniques et plus rarement utilisés …et le tout sur **16 canaux**. Chaque connexion MIDI permet ainsi de contrôler jusqu'à 16 machines simultanément. Toutes ces caractéristiques sont revues (très) à la hausse avec l'arrivée en 2020 du [[https://midi.org/midi-2-0|MIDI 2.0]], chaque message passant de 7 bit à 32 bit, mais son implémentation est encore loin d'être universelle. Par extension on a développé la norme **[[https://fr.wikipedia.org/wiki/General_MIDI|General MIDI]]** qui attribue à chaque "programme" MIDI un instrument précis (par ex. le piano en 1 et la batterie sur la canal 10). La plupart des fichiers MIDI qu'on peut trouver en ligne respectent cette nomenclature (en version 1 : GM1 ou 2 : GM2).\\ Cette solution avait surtout son intérêt dans les années 90, quand les espaces de stockage étaient trop limités pour des formats //wav// ou //mp3// : cela permettait de lire n'importe quelle orchestration avec les moyens du bord. En général les cartes son intégraient un synthétiseur qui s'attelait à la tâche du rendu audio avec plus ou moins de succès (pour les oreilles). Dans le monde de la [[;mao|MAO]] le protocole MIDI est encore très utile, mais rien n'oblige à suivre la norme //General MIDI//, qui trouve plutôt son intérêt pour les musiques de jeux vidéo des années 90, ou pour certains détournements dans le style de [[http://www.pardon-my-french.fr|Pardon My French]]. ===== Implémentation du MIDI sous Linux ===== Sous Linux, c'est le serveur de son qui s'occupe de router les signaux MIDI entre les applications et les drivers des interfaces. ALSA propose une très bonne solution multimédia, et il est disponible de base sur quasi toutes les distributions Linux (et évidemment sur Ubuntu).\\ Pour de la [[:MAO]] on peut aussi utiliser [[:jackd|JACK]], qui permet aussi de router le MIDI. Il est (//était ?//) possible d'utiliser ensemble le MIDI //ALSA// et le MIDI //JACK// au moyen du bridge [[apt>a2jmidid]] qui s'occupe de les relier. La question ne se pose plus grâce à [[:PipeWire]], qui gère les deux protocoles. En plus de ceux des interfaces audio, ALSA fournit les pilotes des interfaces MIDI. Une fois branchée, un rapide aplaymidi -l devrait donc vous indiquer si votre interface MIDI est reconnue ou non. ===== Lecture de fichiers MIDI ===== La norme //General MIDI// associe aux signaux MIDI des instruments traditionnels (piano, percussions, violons, etc.).\\ Pour qu'une machine puisse reproduire assez fidèlement le son de ces instruments, il est généralement indiqué d'utiliser des banques de samples. Ce sont des assemblages de courts enregistrements audio de chaque note d'un instrument de musique.\\ Ces banques de samples se trouvent au format //SoundFont// dans des fichiers avec des extensions ''.sf2'' (et anciennement ''.sbk'').\\ Pour utiliser une //SoundFont// il faut un lecteur de //SoundFont// (il s'agit d'un //[[:mao#samplers|sampler]]// qu'on peut aussi appeler dans ce cas //sample player//). Ce lecteur de sample peut être de 3 types : - un **[[#Synthèse logicielle|synthétiseur logiciel]]** (c'est le cas le plus courant, et conseillé) - un **[[#Synthétiseur intégré à la carte son|synthétiseur intégré dans votre carte son]]** si vous possédez une carte son gérant nativement le //General MIDI// (ce qui n'a plus grand intérêt passé l'an 2000). - un **instrument externe** (synthétiseur, expandeur ou sampleur) connecté à une interface MIDI (qui peut être celle de la carte son ou une interface dédiée). ==== SoundFonts ==== Wikipédia nous apprend que : > Un //soundfont// désigne une technologie mise au point par la société E-mu pour Creative Labs, permettant de stocker dans un fichier au format .sbk (pour //SoundFont Bank//) puis .sf2 (pour //SoundFont Bank Version 2//) des échantillons au format WAV, puis de les organiser sous forme d'instruments MIDI, afin que ceux-ci puissent être utilisés sur un [[wpfr>synthétiseur]] dit « à table d'ondes ». Il existe d'excellentes //SoundFonts// gratuites. Certaines sont directement accessibles dans les dépôts Ubuntu donc très faciles à installer : [[apt>fluid-soundfont-gm]] (conseillée) et [[apt>fluid-soundfont-gs]] ou [[apt>musescore-soundfont-gm]] (plus légères, et de moins bonne qualité). Ces paquets installent les //SoundFonts// dans le répertoire **/usr/share/sounds/sf2**. On trouve aussi plein de //SoundFonts// en ligne sur des sites variés (attention il ne s'agit pas toujours de //General MIDI//, la plupart du temps il s'agit seulement d'un instrument spécifique) : * [[http://www.personalcopy.com/linuxfiles.htm]] * [[http://sonimusicae.free.fr/matshelgesson-maestro.html]] * [[https://trisamples.com/free-soundfonts/]] * [[https://musescore.org/fr/handbook/banques-de-sons-soundfonts#specialised]] * [[https://download.linuxaudio.org/musical-instrument-libraries/]] Voici une sélection d'excellentes //SoundFonts// libres de droit : ^ Nom ^ Description ^ License ^ Auteur ^ Format / Téléchargement ^ | Salamander Grand Piano | piano à queue Yamaha C5 | [[https://creativecommons.org/licenses/by/3.0/|CC BY]] | Alexander Holm | [[https://download.linuxaudio.org/musical-instrument-libraries/sfz/salamander_grand_piano_v3_48khz24bit.tar.7z|SFZ 24bit/48kHz (1,2Go)]] ou [[https://freepats.zenvoid.org/Piano/SalamanderGrandPiano/SalamanderGrandPianoV3+20161209_44khz16bit.tar.xz|SFZ 16bit/44.1kHz (394Mo)]] | | Detuned Piano | un piano désaccordé | [[https://creativecommons.org/licenses/by-sa/3.0/|CC BY SA]] | | [[https://download.linuxaudio.org/musical-instrument-libraries/sfz/detuned_piano.tar.7z|SFZ (95Mo)]] | | jRhodes | piano électrique Fender Rhodes | | |[[https://download.linuxaudio.org/musical-instrument-libraries/sf2/jRhodes3.tar.7z|SFZ (35Mo)]] | | The Open Source Drumkit | batterie | | Real Music Media | [[https://download.linuxaudio.org/musical-instrument-libraries/sfz/the_open_source_drumkit.tar.7z|SFZ (390Mo)]] | | Salamander Drumkit | batterie | [[https://creativecommons.org/licenses/by-sa/3.0/|CC BY SA]] | Alexander Holm |[[https://download.linuxaudio.org/musical-instrument-libraries/sfz/salamander_drumkit_v1.tar.7z|SFZ (343Mo)]] | | Fluid (R3) | assortiment d'instruments au format [[:midi#midi_general_midi_et_fichiers_midi|General MIDI]] | | | [[apt>fluid-soundfont-gm]] (119Mo) | | MuseScore General HQ | assortiment d'instruments au format [[:midi#midi_general_midi_et_fichiers_midi|General MIDI]] | | | [[apt>musescore-general-soundfont-lossless]] (330Mo) | Les //SoundFonts// fonctionnent très bien en particulier avec les orgues et les instruments percussifs (dont le piano fait partie). Les fichier ''.sfArk'' sont des //SoundFonts// compressées dans un format propriétaire. [[https://github.com/raboof/sfarkxtc|sfarkxtc]] permet de les décompresser en [[:terminal|ligne de commande]] sur Linux. Pour jouer une //SoundFont// avec un [[:controleurs_midi|contrôleur MIDI]], vous pouvez suivre [[:tutoriel:piano_midi|ce tutoriel]]. ==== Synthèse logicielle ==== Il existe 3 principaux lecteurs de //SoundFont// sous Ubuntu : **[[:Timidity]]**, **Fluidsynth** (et ses dérivés) et **[[:LinuxSampler]]**. Pour simplement lire un fichier MIDI, le plus simple est probablement d'installer **Fluidsynth** avec une SoundFont General MIDI : sudo apt install fluidsynth fluid-soundfont-gm Vous pouvez ensuite lire votre fichier MIDI en lançant : fluidsynth -a pulseaudio /usr/share/sounds/sf2/FluidR3_GM.sf2 fichier_midi.mid (Remplacez "fichier_midi.mid" par le nom de votre fichier MIDI.) Dans ce cas on utilise le serveur de son **[[:pulseaudio]]**, utilisé par ubuntu par défaut. On peut aussi utiliser **alsa**, **oss** ou **[[:jackd|jack]]**.\\ Tapez "quit" pour arrêter la lecture, vous pouvez aussi taper Ctrl + C ou simplement fermer la fenêtre du terminal. Certains [[:lecteur_audio|lecteurs audio]] comme [[:Audacious]] permettent de lire les fichiers MIDI. Pour cela il faut généralement installer et configurer des plugins (voir [[https://redmine.audacious-media-player.org/boards/1/topics/1143|ici]] pour Audacious).\\ La plupart du temps ces extensions font également appel à **[[:Timidity]]** ou à **Fluidsynth** pour fonctionner. Il faut donc dans tous les cas installer les paquets nécessaires au préalable. ==== Convertir un fichier MIDI en fichier audio ==== Pour convertir un fichier MIDI en fichier audio, le plus simple est d'installer **Fluidsynth** avec une //SoundFont// //General MIDI// : sudo apt install fluidsynth fluid-soundfont-gm Vous pouvez ensuite effectuer la conversion en lançant : fluidsynth -F fichier_audio.wav /usr/share/sounds/sf2/FluidR3_GM.sf2 fichier_midi.mid (Remplacez "fichier_midi.mid" par le nom de votre fichier MIDI.) Vous obtiendrez ainsi un fichier audio que vous pourrez écouter facilement avec n'importe quel lecteur multimédia. ==== Synthétiseur intégré à la carte son ==== Cette partie de la documentation est ancienne et concerne du matériel obsolete. Elle peut sans doute toujours servir pour certains ordinosaures, ou éventuellement quelques amateurs de rétro chiptune lo-fi. Certaines cartes sons contiennent une implémentation matérielle du General MIDI (en particulier les cartes haut de gamme des années 90 et du début des années 2000). Certaines cartes incorporent un synthétiseur FM (toutes les Sound Blaster 16 et compatibles) qui donne des sons de très basse qualité. L'utilisation de //SoundFont// offre un rendu bien plus fidèle des instruments traditionnels. === Cartes compatibles === Liste non exhaustive de cartes sons disposant d'un lecteur de //SoundFont// matériel : * Sound Blaster AWE32 ; * Sound Blaster AWE64 ; * Sound Blaster PCI512 ; * Sound Blaster Live! ; * E-mu Audio Production Studio (APS) ; * Creative ProdiKeys MIDI Keyboard ; * Sound Blaster Audigy ; * Sound Blaster Audigy 2 (dont la version ZS PCMCIA pour ordinateurs portables) ; * Sound Blaster Extigy USB ; * Sound Blaster X-Fi. Liste non exhaustive de cartes sons disposant d'un synthétiseur FM matériel : * Sound Blaster 8 ; * Sound Blaster Pro ; * Sound Blaster 16. Dans le cas des cartes FM, il faut activer le pilote ALSA OPL3 dans /etc/modules : snd-sb16 #Pour une soundblaster 16 snd-seq #Pilote OPL3 Et s'assurer d'avoir chargé la table FM en ajoutant cette ligne dans /etc/rc.local (avant la ligne exit 0) : sbiload -p 65:0 --opl3 /usr/share/sounds/opl3/std.o3 /usr/share/sounds/opl3/drums.o3 === Pré-requis === * Vous aurez besoin d'une carte son fonctionnant correctement avec [[http://www.alsa-project.org/alsa-doc/|ALSA]]. * Nous allons utiliser un fichier //SoundFont//. Pour bien comprendre les manipulations qui suivent, il est important de lire attentivement la [[#SoundFonts|section de ce document consacrée aux SoundFonts]]. === Installer les paquets nécessaires === //Via// [[:Synaptic]], recherchez et installez les paquets **awesfx** et **pmidi**. En ligne de commande : sudo apt-get install awesfx pmidi === Chargement de la SoundFont === Tout d'abord, testons si cela fonctionne. Pour charger la //SoundFont // une fois, exécutez la commande : sfxload soundfont.sf2 Tapez : pmidi -l Cette commande devrait vous donner une réponse du style : Port Client name Port name 64:0 External MIDI 0 MIDI 0-0 65:0 Emu10k1 WaveTable Emu10k1 Port 0 65:1 Emu10k1 WaveTable Emu10k1 Port 1 65:2 Emu10k1 WaveTable Emu10k1 Port 2 65:3 Emu10k1 WaveTable Emu10k1 Port 3 Il s'agit des différents ports utilisables pour jouer du MIDI. Pour jouer un fichier MIDI, faites : pmidi -p 65:0 unfichier.mid ou aplaymidi -p 65:0 unfichier.mid Voilà, vous devriez désormais entendre quelque chose ! Ensuite, allez dans Système/Préférences/Sessions, cliquez sur +Ajouter. Entrez la commande sfxload tel que décrite plus haut, nommez-la, validez et fermez. La //SoundFont// devrait dorénavant être chargé au démarrage de la session et permettre de jouer instantanément vos fichiers midi. ===== Ressources ===== ==== Fichiers MIDI ==== * [[https://www.mididb.com/|Mididb]] : base de donnée de fichiers midi (orienté musiques pop) * [[http://www.vgmusic.com/|Video Game Musique Archive]] : fichiers midi de musiques de jeux vidéos * [[http://www.classicalarchives.com/|Classical Archive]] : fichiers midi de musique classique (payant) ===== Voir aussi===== * La page concernant les [[:contrôleurs MIDI]] * [[:tutoriel:piano midi|Jouer du piano avec un contrôleur MIDI]] * [[:tutoriel/wine_et_midi]] - comment lancer une application Win32 utilisant le midi ? ---- //Contributeurs : [[:utilisateurs/krodelabestiole]], [[utilisateurs:Vicks]], [[utilisateurs:jd]], [[utilisateurs:raph|Raphaël Doursenaud]], [[utilisateurs:grobs|Grobs]].//