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…)
# signifie qu'il faut être en console, en mode super-utilisateur.
En mode super-utilisateur: su - [Enter]
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: # modprobe snd-seq-midi mais cela ne semble plus nécessaire.
En mode super-utilisateur: su - [Enter]
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:
#addgroup toto audioEn mode super-utilisateur: su - [Enter]
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:
#chown root:audio /dev/dsp /dev/mixer /dev/midi /dev/sequencerEn mode super-utilisateur: su - [Enter]#chmod 660 /dev/dsp /dev/mixer dev/midi /dev/sequencerEn mode super-utilisateur: su - [Enter]
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:
#mknod /dev/midi c 14 2En mode super-utilisateur: su - [Enter]
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:
#chown root:audio /usr/share/sounds/sf2/FluidR3_GM.sf2En mode super-utilisateur: su - [Enter]#chmod 744 /usr/share/sounds/sf2/FluidR3_GM.sf2En mode super-utilisateur: su - [Enter]
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):
#apt install awesfxEn mode super-utilisateur: su - [Enter]#modprobe snd-emu10k1-synth asfxload /home/toto/sons/midi/32MBGMSFX.SF2En mode super-utilisateur: su - [Enter]
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:
#apt install fluidsynth fluid-soundfont-gmEn mode super-utilisateur: su - [Enter]
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.
#apt install timidityEn mode super-utilisateur: su - [Enter]
4.1 Avec Freepats
Freepats est une banque libre incomplète de patches (sons) Général Midi. En janvier 2012, il y manque:
003 | Piano honky-tonk | 051 | Orch. synthé 2 | 089 | Chaud | 109 | Cornemuse |
010 | Boîte à musique | 052 | Choeurs Aah! | 090 | Poly Synth. | 110 | Viole |
011 | Vibraphone | 054 | Voix | 091 | Choeur Synth. | 111 | Shanai |
012 | Marimba | 055 | Coup d'orchestre | 092 | Archet Synth. | 112 | Cloche |
017 | Orgues percussives | 062 | Cuivres Synthé 1 | 093 | Métallique | 113 | Agogo |
018 | Orgues Rock | 063 | Cuivres Synthé 2 | 096 | Pluie de glace | 116 | Taiko |
020 | Harmonium | 077 | Sakuhachi | 097 | Soundtrack | 117 | Tom |
022 | Harmonica | 078 | Sifflet | 099 | Atmosphère | 118 | Percu synth. |
031 | Harmoniques (guitare) | 081 | Ondes triangulaires | 100 | Brillance | 119 | Cymbale inverse |
039 | Basse Synthé2 | 082 | Calliope | 103 | SF | 121 | Respiration |
041 | Violon alto | 083 | Chiff | 105 | Banjo | 123 | Gazouilli |
043 | Contrebasse | 085 | Voix synth. | 106 | Shamisen | 124 | Téléphone |
049 | Section cordes 2 | 086 | Quintes | 107 | Koto | 126 | Applaudissement |
050 | Orch. synthé 1 | 087 | Basse+Lead | 108 | Kalimba | 127 | Revolver |
#apt install freepatsEn mode super-utilisateur: su - [Enter]
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
- -i désigne l'interface. A pour ALSA
- -Bn,m prévoit la taille du buffer. Il s'agira ici de 2 fragments de 2ˆ(m+2), soit 1024 octets. On peut aller jusqu'à 12 (16384 octets), ce qui augmente la stabilité de la sortie
- -Os : Output vers ALSA
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)