MIDI

Vous trouverez une excellente documentation concernant le protocole MIDI en français sur LinuxMAO.

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 tend à être (lentement) remplacé par le protocole 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 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 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 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 Pardon My French.

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 :

  1. un synthétiseur logiciel (c'est le cas le plus courant, et conseillé)
  2. un 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).
  3. 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 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)
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. sfarkxtc permet de les décompresser en ligne de commande sur Linux.
Pour jouer une SoundFont avec un contrôleur MIDI, vous pouvez suivre 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 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.

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

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.

Fichiers MIDI


Contributeurs : krodelabestiole, Vicks, jd, Raphaël Doursenaud, Grobs.

  • midi.txt
  • Dernière modification: Le 06/09/2024, 15:41
  • par krodelabestiole