L'émulation MIDI avec GNU/Linux

Cette page explique le minimum à connaître sur un système GNU/Linux (ligne de commande, système de fichiers…)

#En mode super-utilisateur: su - [Enter] signifie qu'il faut être en console, en mode super-utilisateur.

Cette page traite de la production de son à partir de fichiers MIDI par l'ordinateur seul et de la transformation d'un fichier MIDI en fichier son (WAV, OGG ou MP3…) à l'aide des serveurs FluidSynth ou Timidity. À mi-chemin entre la production logicielle de sons et les instruments extérieurs, certaines cartes de son de Creative Labs peuvent contenir des banques de sons et constituer elles-mêmes l'instrument de musique, libérant ainsi le processeur de ce travail (mais les ordinateurs étant maintenant de plus en plus puissants, ces cartes ont moins de raison d'exister).

Note: Une banque de son contenant GM dans son nom signifie qu'elle est conforme au standard General Midi, qui impose un ordre dans les instruments de musique (Le premier est le Grand Piano, le 41e est le violon, le 66e le Sax Alto…). Remplacer une banque de son General Midi par une autre n'oblige donc pas à redéfinir les instruments.

Le serveur Jack (paquet jackd) est automatiquement installé avec le logiciel rosegarden. Il permet la communication entre les différentes entrées et sorties MIDI et est utilisé par les applications dont il est question ici.

1. Pré-requis (pm)

2. Banques de sons

2.1 Les soundfonts sf2
2.2 Wavetable et SoundBlaster

3. FluidSynth et QSynth

3.1 Fluidsynth comme serveur
3.2 Jouer des fichiers midi
3.3 L'interface Qsynth

4. L'omnipotent Timidity

4.1 Avec Freepats
4.2 Autres soundfonts
4.3 Le serveur Timidity
4.4 Jouer des fichiers MIDI
4.5 Fabriquer des fichiers de sons

5. L'utilisation par une application

5.1 Kmid (karaoké)
5.2 TuxGuitar (tablatures)
5.3 Rosegarden
5.4 MuseScore

6. Autres ressources (.en)


1. Pré-requis (pour mémoire)

Le système ALSA (noyaux 2.6.x) ou OSS (par défaut dans les noyaux 2.4.x) doit être chargé, ainsi qu'udev qui s'occupe de la création automatique des pilotes (fichers contenus dans /dev). Ne vous occupez de cette cette section que si le reste ne fonctionne pas.

Pour ALSA, il fallait auparavant charger les modules associés au sequencer MIDI: #En mode super-utilisateur: su - [Enter] modprobe snd-seq-midi mais cela ne semble plus nécessaire.

Si ce n'est fait, il faut s'affilier au groupe audio du fichier /etc/group en ajoutant son identifiant (par exemple: toto) à la ligne commençant par audio (ne changez pas le nombre nn qui s'y trouve):

audio:x:nn:toto

Cela se fait simplement par la commande:

#En mode super-utilisateur: su - [Enter] addgroup toto audio

Ce qui suit devrait se faire automatiquement par le système. ALSA utilisait auparavant /dev/dsp, /dev/mixer, /dev/sequencer et /dev/midi. Chacun de ces pilotes devait permettre au groupe audio d'y écrire:

#En mode super-utilisateur: su - [Enter] chown root:audio /dev/dsp /dev/mixer /dev/midi /dev/sequencer
#En mode super-utilisateur: su - [Enter] chmod 660 /dev/dsp /dev/mixer dev/midi /dev/sequencer

S'il faut automatiser le chargement des modules liés à l'émulation du synthétiseur, ajouter les lignes suivantes au fichier /etc/modules (pour les distributions Debian; pour Mandriva: /etc/modprobe.preload:

snd-seq
snd-seq-midi-event
snd-seq-midi
snd-seq-midi-emul
snd-seq-virmidi
snd-emux-synth # ces deux derniers pour les banques de son CreativeLab
snd-emu10k1-synth

Il faut parfois créer le descripteur de périphérique /dev/midi:

#En mode super-utilisateur: su - [Enter] mknod /dev/midi c 14 2

2. Les banques de sons

2.1 Les fontes

/usr/share/sounds/sf2/FluidR3_GM.sf2 est un ensemble complet des 128 instruments General MIDI qui tiennent en 147MB, installé avec Fluidsynth. Pour être sûr de pouvoir les utiliser, faire au choix:

#En mode super-utilisateur: su - [Enter] chown root:audio /usr/share/sounds/sf2/FluidR3_GM.sf2
#En mode super-utilisateur: su - [Enter] chmod 744 /usr/share/sounds/sf2/FluidR3_GM.sf2

Il est possible d'utiliser d'autres fontes sonores librement récupérables sur Internet: dans FluidSynth, cliquez Setup» Soundfounts» Open et choisissez un fichier .sf2 dans un répertoire.

Il existe des fontes sfArk, qu'il faut décompresser. Il existe un utilitaire en ligne de commande: sfarkxtc. Il suffit de taper la commande

sfarkxtc votre_fonte.sfArk fichier_decompresse

Attention! sous Linux, il faudra peut-être installer la vieille librairie libstdc++5. Pour Debian (Squeeze):

apt install libstdc++5

2.2 Wavetable et SoundBlaster

Les cartes SoundBlaster Live! (testée pour cette doc avec Debian/Sarge), AWE et Audigy contiennent une mémoire où il est possible de charger les soundfonts, ce qui soulage le processeur central, déchargé de la gestion des sons par un serveur MIDI. Il faut d'abord installer le paquet awesfx (à ne faire qu'une fois), charger le module snd-emu10k1-synth puis charger la soundfont (asfxload pour ALSA ou sfxload pour OSS):

#En mode super-utilisateur: su - [Enter] apt install awesfx
#En mode super-utilisateur: su - [Enter] modprobe snd-emu10k1-synth
asfxload /home/toto/sons/midi/32MBGMSFX.SF2

L'adresse et le nom du fichier dépend de ce que vous possédez comme fonte et où vous l'avez placée (FluidR3_GM.sf2 se trouve en /usr/share/sounds/sf2/). asfxload -M renvoie la mémoire (encore) disponible sur la carte.

Attention! Cette manip n'a pu être reproduite avec la distribution Debian 4.0 Etch ni Debian 5.0 Lenny. Pour 6.0 Squeeze, je ne dispose plus de carte audio SoundBlaster, mais un portable à 1,7GHz et 512Mo de mémoire vive (RAM) capable de faire confortablement tourner rosegarden sous émulation MIDI par FluidSynth; avec Timidity, c'est plus juste.

3. FluidSynth et QSynth

L'installation se fait de façon simple sous Debian:

#En mode super-utilisateur: su - [Enter] apt install fluidsynth fluid-soundfont-gm

3.1 Fluidsynth comme serveur

En saisissant fluidsynth dans une console, un shell s'ouvre. La banque de son chargée avec fluidsynth se trouve à l'adresse /usr/share/sounds/sf2/FluidR3_GM.sf2 et est chargée avec:

> load /usr/share/sounds/sf2/FluidR3_GM.sf2

Il est possible de faire cela en une ligne:

fluidsynth /usr/share/sounds/sf2/FluidR3_GM.sf2

Le serveur sera lancé jusqu'à ce que vous saisissiez quit ou que vous fermiez la console. Entre temps, il peut interpréter en son les signaux lancés par les applications Kmid, Tuxguitar ou rosegarden.

3.2 Jouer des fichiers MIDI

FluidSynth peut jouer les fichiers MIDI:

fluidsynth /home/toto/sons/votrefonte.sf2 votre-fichier.mid

3.3 L'interface Qsynth

Qsynth permet de lancer l'émulation MIDI de Fluidsynth sans passer par la console. Il ne joue pas de fichier lui-même. Un petit paramétrage est nécessaire: Setup.

Onglet Audio: choisir alsa ou oss si jack n'est pas disponible
Onglet Soundfount: indiquer un fichier .sf2 (une banque de sons MIDI doit être présente sur votre PC)
Onglet MIDI: choisir par exemple alsa_seq

Qsynth permet également un paramétrage de réverbération et de chorus.

4. Le serveur Timidity + Freepats

Le défaut de Timidity est, selon les dires mêmes des auteurs, d'être gourmand en ressources du processeur. Cela se ressent lorsqu'on ouvre un processus concurrent gourmand, comme une nouvelle fenêtre.

#En mode super-utilisateur: su - [Enter] apt install timidity

4.1 Avec Freepats

Freepats est une banque libre incomplète de patches (sons) Général Midi. En janvier 2012, il y manque:

003Piano honky-tonk051Orch. synthé 2089Chaud109Cornemuse
010Boîte à musique052Choeurs Aah!090Poly Synth.110Viole
011Vibraphone054Voix091Choeur Synth.   111Shanai
012Marimba055Coup d'orchestre092Archet Synth.112Cloche
017Orgues percussives062Cuivres Synthé 1093Métallique113Agogo
018Orgues Rock063Cuivres Synthé 2096Pluie de glace116Taiko
020Harmonium077Sakuhachi097Soundtrack117Tom
022Harmonica078Sifflet099Atmosphère118Percu synth.
031Harmoniques (guitare)   081Ondes triangulaires   100Brillance119Cymbale inverse
039Basse Synthé2082Calliope103SF121Respiration
041Violon alto083Chiff105Banjo123Gazouilli
043Contrebasse085Voix synth.106Shamisen124Téléphone
049Section cordes 2086Quintes107Koto126Applaudissement
050Orch. synthé 1087Basse+Lead108Kalimba127Revolver
#En mode super-utilisateur: su - [Enter] apt install freepats

Les sons sont installés en /usr/share/midi. Le fichier de configuration de Timidity se trouve en /etc/timidity/timidity.cfg. Celui-ci contient une ligne pointant vers le fichier de configuration de freepats:

source /etc/timidity/freepats.cfg

Le fichier /etc/timidity/freepats.cfg contient l'adresse et la liste des instruments "instruments":

dir /usr/share/midi/freepats

# Automatically generated on Sun Feb 19 19:22:39 EST 2006
# by http://freepats.opensrc.org/mkcfg.sh.txt

drumset 0

 25	Drum_000/025_Snare_Roll.pat
etc.

4.2 Autres soundfonts

Il est néanmoins possible d'utiliser une des innombrables "soundfont" (format .sf2) qui se trouvent sur Internet. Pour conserver l'ordre habituel des instruments, télécharger un fichier .sf2 "General Midi", contenant "GM" dans le nom, par exemple 32MBGMSFX.SF2 (cela peut commencer par 8MB…). Si votre identifiant est toto, sauvegardez-le par exemple dans /home/toto/sons/. Le fichier /etc/timidity/timidity.cfg devra alors contenir la ligne

# source /etc/timidity/timidity.cfg (le # désactive cette ligne)
soundfont /home/toto/sons/8MBGMSFX.SF2

La fonte de Fluidsynth est très recommandable. Si chargée:

# source /etc/timidity/freepats.cfg (le # désactive cette ligne)
soundfont /usr/share/sounds/sf2/FluidR3_GM.sf2

4.3 Le serveur Timidity

Pour utiliser le service émulation MIDI de Timidity pour ALSA:

timidity -iA -B2,8 -Os

Le serveur étant lancé, il peut interpréter en son les signaux lancés par les applications Kmid, Tuxguitar ou rosegarden.

4.4 Jouer des fichiers MIDI

Timidity peut simplement jouer les fichiers .mid, .rmi, .mod, .kar, .rcp, .r36, .g18, .g36…:

timidity votre-fichier.mid

Pour lancer timidity avec une interface graphique gtk minimale:

timidity -ig

4.5 Fabriquer des fichiers de sons

Timidity peut également convertir des fichiers MIDI (.mid, .kar, .mod uu .rmi) en fichiers audio. La lenteur éventuelle de votre processeur ne nuira pas à la qualité du fichier produit, puisqu'il n'est pas obligé de jouer en temps réel et prendra donc le temps qu'il faut (le O (pour Output) est la lettre o majuscule, pas le chiffre zéro):

Ogg Vorbis (.ogg): timidity -Ov votre-fichier.mid
RIFF Wav (.wav): timidity -Ow votre-fichier.mid
Sun Audio (.au): timidity -Ou votre-fichier.mid
AIFF (aiff): timidity -Oa votre-fichier.mid

Pour les innombrables autres possibilités (il est même possible de lire un fichier midi dans une archive .tar, .zip ou .lzh):

man timidity

5. L'utilisation par une application

5.1 Kmid (karaoké)

Le joueur de fichiers Midi et karaoke Kmid est également capable d'utiliser les serveurs FluidSynth et Timidity, ainsi que les sons chargés par (a)sfxload pour certaines cartes-son, mais n'oubliez pas de modifier si nécessaire Configuration» Configuration Midi en conséquence.

5.2 TuxGuitar (éditeur/lecteur de tablatures)

Tuxguitar 1.0 est un lecteur et éditeur de fichiers GuitarPro .gp2, .gp3, .gp4, .gp5, PowerTab .ptb qui dispose de son propre format .tg. Il peut en outre importer les format .tef (TablEdit) et MIDI, et exporter aux formats pdf, ascii, lilipond, midi et musicXML. Il permet la sortie par l'émulation MIDI.

Il s'agit d'un éditeur musical dédié à la guitare (édition de tablatures), mais peut faire jouer différents instuments (cliquer sur l'instrument par défaut en bas de la partition permet de choisir le son). Il est également possible d'utiliser de préciser jusqu'à sept cordes et modifier l'accordage de l'instrument (basse en ré, mandoline, banjo…).

L'application est écrite en java, il faut donc qu'une machine virtuelle (Java Runtime) soit installée. Tuxguitar peut jouer les fichiers en utilisant un serveur midi, ce qui a été expérimenté avec FluidSynth. Ne pas oublier de préciser le serveur son: Outils» Paramètres» Onglet Sons» Port Midi: Synth input port (3822:0) [128:0] (chiffres pour l'exemple: peuvent varier).

La version 1.2.7 est disponible dans Debian-Squeeze.

5.3 Rosegarden

L'application rosegarden pourra utiliser un serveur MIDI. En cas de conflit, on peut désactiver le système sonore par Centre de configuration KDE» Son et multimédia» Système de son ou alors suspendre automatiquement le système son après un certain nombre de secondes, ce qui libère la carte son pour Timidity ou une autre application qui n'utilise pas le système son de KDE.

Rosegarden est installé avec l'interface jack, qui normalement branche la sortie MIDI de l'application vers le serveur de son. Si ce n'est pas le cas, ouvrez l'interface graphique Jack Control, cliquez sur le bouton "Connecter" puis l'onglet ALSA, cliquez à gauche sur Rosegarden et à droite sur le serveur MIDI FluidSynth (ou Timidity) et ensuite sur le bouton "Connecter".

En cas de possession d'une carte CreativeLab compatible, il est possible de configurer Rosegarden pour qu'il charge lui-même la soundfont au démarrage: Configuration» Configurer Rosegarden» Séquencer» Général: cocher "Charger la soundfont vers la carte Sound Blaster au démarrage", préciser /usr/bin/asfxload (ou sfxload si vous utilisez OSS), l'adresse et le nom précis de la soundfont. Fermez puis relancez Rosegarden. La banque de sons se trouvera, par exemple, en port 65 (pas réussi avec Debian/Etch, où le port est 17).

Quel que soit le serveur de son (Timidity, FluidSynth ou la carte CreativeLab), vérifiez dans le menu de l'application Rosegarden Studio» Gérer les périphériques MIDI que le premier périphérique est bien positionné sur "xxx:0 Synth input Port (nnn) (write)", "xxx:0 TiMidity port 0 (write) ou "Emu10k1 WaveTable".

Une page est consacrée aux débuts sur rosegarden.

5.4 MuseScore

Musescore est un logiciel davantage porté vers l'édition de partition, mais tout en permettant la lecture sonore du morceau édité et - surprise - cette application prend en charge elle-même toute l'émulation MIDI, en chargeant même sa propre soundfont. Si vous n'êtes pas sous KDE, les librairies Qt4 seront installées, ce qui a quand même un poids: le tout pèse plus de 150Mo.

6. Autres ressources

http://www.linuxmao.org/ (.fr)
http://linux-sound.org/ (.en)