MIDI
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).
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 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).
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 Jack.
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étiseur logiciel (c'est désormais le cas le plus courant, et conseillé)
- 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).
- 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 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) :
- http://www.hammersound.net (le site de référence dans le domaine)
'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 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
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 ALSA.
- Nous allons utiliser un fichier SoundFont. Pour bien comprendre les manipulations qui suivent, il est important de lire attentivement la 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
Fichiers MIDI
- Mididb : base de donnée de fichiers midi (orienté musiques pop)
- Video Game Musique Archive : fichiers midi de musiques de jeux vidéos
- Classical Archive : fichiers midi de musique classique (payant)
Sources
- Inspiré de la documentation de (fr) Guido Socher et de la page (fr) SoundFont de Wikipédia.
Voir aussi
- wine_et_midi - comment lancer une application Win32 utilisant le midi ?
Contributeurs : krodelabestiole, Vicks, jd, Raphaël Doursenaud, Grobs.