{{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 **MIDI** 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 synthétiseur ou à un sampleur lorsqu'on appuie sur une note d'un clavier.\\ Le MIDI trouve son application aussi bien dans le monde matériel (via des cable spécifiques, les cables MIDI), que dans le monde virtuel (via des "ports" ou "bus" logiciels). Chaque connexion MIDI permet de contrôler jusqu'à 16 machines simultanément. Le protocole prévoit en effet l'utilisation de 16 canaux. 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 partition. 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. 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 quel 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]]. Par ailleurs le MIDI tend à être remplacé petit à petit (mais encore tout doucement) par le protocole [[http://opensoundcontrol.org/about|OSC]], plus adapté à l'informatique et aux réseaux modernes. ===== 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 utilisera plutôt [[:jackd|Jack]].\\ Il est possible d'utiliser ensemble le MIDI ALSA et le MIDI Jack au moyen du bridge **a2jmidid** qui s'occupera de les relier. En plus du serveur de son, ALSA fournit aussi les drivers de tout ce qui tourne autour du son sur Linux, MIDI y compris. 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 sample se trouvent au format SoundFont dans des fichiers avec des extensions .sbk puis .sf2 (bien plus courant maintenant).\\ Pour utiliser une SoundFont il faut un lecteur de SoundFont (il peut s'agir d'un "sampler", "sample player" ou "synthétiseur à table d'ondes"). Ce lecteur de sample peut être de 3 types : - un **[[#Synthèse logicielle|synthétiseur logiciel]]** (c'est désormais 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). - 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). C'est un cas rare, que nous ne traiterons pas ici. ==== 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.hammersound.net]] (le site de référence dans le domaine) * [[http://www.personalcopy.com/linuxfiles.htm]] * [[http://sonimusicae.free.fr/matshelgesson-maestro.html]] * [[https://trisamples.com/free-soundfonts/]] //Si// vous vous retrouvez avec un fichier se terminant par « .sfArk », sachez qu'il s'agit d'une //soundfont// compressée dans un format //propriétaire//. Un outil pour linux permettant de décompresser ces fichiers est disponible chez [[http://melodymachine.com/sfark.htm|Melody Machine]]. Pour l'utiliser, téléchargez le fichier dans la colonne linux, clique droit "extraire" sur le fichier téléchargé puis dans un terminal lancez: 'chemin/vers/le/dossier/extrait' 'chemin/vers/le/fichier/.sfARk' et vous obtiendrez votre .sf2! ==== 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 lecteurs audio comme [[:Audacious]] permettent de lire les fichiers MIDI. Pour cela il faut généralement installer et configurer des plugins (voir [[http://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 ==== 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 ===== ==== Liens ==== * [[http://www.think-underground.com/index.php?post/2005/11/02/110-comment-lire-des-midis-sous-ubuntu-ou-kubuntu|Article sur Think-Underground]] === Fichiers MIDI === * [[http://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) ==== Sources ==== * Inspiré de la documentation de **(fr)** [[http://linuxfocus.org/Francais/September2002/article259.shtml|Guido Socher]] et de la page **(fr)** [[wpfr>SoundFont|SoundFont de Wikipédia]]. * **(en)** [[https://wiki.ubuntu.com/MidiSoftwareSynthesisHowTo]] ===== Voir aussi===== * [[: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]].//