Le 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 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 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 peut envoyer plusieurs types de messages :
…et le tout sur 16 canaux. Chaque connexion MIDI permet ainsi de contrôler jusqu'à 16 machines simultanément.
Par extension on a développé la norme 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).
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 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 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.
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 sampler qu'on peut aussi appeler dans ce cas sample player).
Ce lecteur de sample peut être de 3 types :
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 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 : fluid-soundfont-gm (conseillée) et fluid-soundfont-gs ou 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) :
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 | CC BY | Alexander Holm | SFZ 24bit/48kHz (1,2Go) ou SFZ 16bit/44.1kHz (394Mo) |
Detuned Piano | un piano désaccordé | CC BY SA | SFZ (95Mo) | |
jRhodes | piano électrique Fender Rhodes | SFZ (35Mo) | ||
The Open Source Drumkit | batterie | Real Music Media | SFZ (390Mo) | |
Salamander Drumkit | batterie | CC BY SA | Alexander Holm | SFZ (343Mo) |
Fluid (R3) | assortiment d'instruments au format General MIDI | fluid-soundfont-gm (119Mo) | ||
MuseScore General HQ | assortiment d'instruments au format General MIDI | musescore-general-soundfont-lossless (330Mo) |
.sfArk
sont des SoundFonts compressées dans un format propriétaire. sfarkxtc permet de les décompresser en ligne de commande sur Linux.
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 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 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.
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.
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.
Liste non exhaustive de cartes sons disposant d'un lecteur de SoundFont matériel :
Liste non exhaustive de cartes sons disposant d'un synthétiseur FM matériel :
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
Via Synaptic, recherchez et installez les paquets awesfx et pmidi.
En ligne de commande :
sudo apt-get install awesfx pmidi
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.
Contributeurs : krodelabestiole, Vicks, jd, Raphaël Doursenaud, Grobs.