par Guido Socher (homepage)
L´auteur:
Guido aime Linux non seulement parce que c'est amusant de découvrir les nombreuses
possibilitées de ce systeme, mais aussi pour les personnes impliquées dans son développement.
Traduit en Fran�ais par:
Hélène Duwelz <lxhzd(at)exchange.uk.ml.com>
Sommaire:
|
Midi avec alsa
Résumé:
Midi est un format de fichier qui ne contient pas des échantillons de sons digitaux
mais une description sur la façon de créer les sons. Ceci est similaire
aux partitions musicales où chaque note est une représentation symbolique
d'un ton. Les fichiers Midi sont de ce fait de très petites tailles, en comparaison
des fichiers wav, par exemple.
Pour convertir le flux midi en sons réels, il vous faut un synthétiseur.
Il s'agit d'un matériel ou d'un logiciel utilisant des échantillons de son
digital issus d'un instrument (tel un piano) pour générer des tons.
Ces échantillons sont connus sous le nom de "soundfont".
Cet article explique comment utiliser Alsa (advanced linux sound
architecture) en tant qu'interface de synthétiseur midi.
Introduction
Il y a quelques années à peine, vous pouviez trouver de célèbres cartes son
telles que les "Gravis UltraSound" ou "SoundBlaster Gold" dans n'importe quel magasin d'informatique.
Ces deux cartes avaient un synthétiseur midi hardware interne.
Malheureusement, ces cartes ne sont plus commercialisées. Et même si vous le vouliez,
elles ne pourraient plus être installées dans un ordinateur moderne car
c'étaient des cartes à bus ISA.
Les ordinateurs actuels utilisent le bus PCI et possèdent souvent déjà un processeur de son
dans le chipset de la carte mère.
La plupart de ces chipsets ne supportent pas la synthèse midi. Si vous regardez la liste des cartes son supportant alsa
vous vous demanderez sûrement laquelle de ces cartes acheter.
La réponse est malheureusement plus simple qu'il n'y paraît. Il n'existe actuellement qu'une seule carte
supportant la synthèse midi, disponible dans les magasins d'informatique : la Soundblaster live.
Si vous ne possédez pas une carte Soundblaster live, vous pouvez utiliser
une émulation logicielle pour la synthèse midi
et je vous expliquerai plus loin comment le faire.
Le nécessaire
Alsa est actuellement dans une période de transition. La version stable 0.5 est ancienne et la version 0.9 est toujours en cours
de développement. En fait, si vous voulez utiliser les applications midi
avec alsa, il vous faut la version 0.5
car il n'existe quasiment aucune application pour la version 0.9 et les interfaces entre les versions
0.5 et 0.9 sont incompatibles (NB: les échantillons de son PCM, les
fichiers wav, et les applications basées sur l'échantillonage ne posent pas de problème avec la version 0.9. Je parle de midi.)
Les paquetages pour la version 0.5 sont:
Des informations sur la manière de compiler alsa peuvent être trouvées dans le fichier alsa howto (voir références).
Classiquement, vous devez exécuter
tar jxvf alsa-driver-0.5.12a.tar.bz2
cd alsa-driver-0.5.12a
./configure --with-sequencer=yes --with-oss=yes
--with-isapnp=no
make
make install
./snddevices
pour le pilote et "./configure;make;make install" pour le reste.
Après installation, vous pouvez charger les modules dans votre noyau. Pour soundblaster live
(puce =emu10k1) taper :
modprobe snd-card-emu10k1
modprobe snd-synth-emu10k1
modprobe snd-seq-midi
modprobe snd-pcm-oss
modprobe snd-mixer-oss
modprobe snd-seq-oss
Pour d'autres cartes, remplacez les deux premières lignes par le module de votre carte
(par exemple snd-card-via686a pour une carte son interne basée sur le chipset via 686). Mandrake et Suse supportent
alsa et vous pouvez également utiliser dans ce cas le programme de détection
et de configuration matérielle
de la distribution linux (harddrake et yast2). Si vous n'avez pas la moindre idée du type de chipset que vous possédez,
tapez "lspci -v" (la commande lspci appartient au paquetage nommé pciutils).
Il est temps maintenant de tester le son. Lancez le programme
alsamixer
et tapez "m" pour enlever la sourdine des volumes master et
pcm, puis utilisez les touches flèchées
pour modifier le volume. Tapez Echap pour quitter alsamixer quand vous avez fini.
Pour sauvegarder les paramètres dans /etc/asound.conf, tapez la commande
/usr/sbin/alsactl store
Tapez maintenant
play flute.wav
et vous devriez entendre le son. Dans le cas contraire, allez dans le répertoire /proc/asound et
contrôlez /proc/asound/devices et /proc/asound/oss-devices. Vous devriez y
trouver "mixer" et "digital audio" (mes fichiers).
C'était le test pour vérifier que l'émulation pcm oss et le son en général fonctionnent.
Plus bas, j'expliquerai ce qu'il faut ajouter dans /etc/modules.conf pour tout faire de façon automatique,
mais la prochaine étape consiste à faire fonctionner midi.
midi
Si vous avez une carte son avec un synthétiseur midi interne (sound blaster live),
vous devez charger le "soundfont" (les échantillons de son) dans la puce de votre carte son.
Si votre carte est différente, vous pouvez installer timidity (voir dans les
références l'URL pour le téléchargement)
et l'utiliser en tant que synthétiseur midi alsa. Les programmes
fonctionnant au-dessus d'alsa ne feront pas la différence.
Chargement du soundfont
Vérifier que le programme sfxload (/bin/sfxload) est installé.
Dans le cas contraire, installez-le. Il fait partie du paquetage appelé awesfx
(vérifiez les CD de votre distribution linux ou allez sur http://mitglied.lycos.de/iwai/awedrv.html).
Copiez ensuite le fichier 8MBGMSFX.SF2 de votre CD Soundblaster Live
(/mnt/cdrom/AUDIO/Common/SFBANK/8MBGMSFX.SF2) dans
/etc/midi/8MBGMSFX.SF2. Pour charger le soundfont, exécutez la commande :
/bin/sfxload /etc/midi/8MBGMSFX.SF2
Le programme pmidi (voir références) est un bon programme de test. Tapez
pmidi -l
Ceci doit faire apparaître le texte suivant :
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
Tapez maintenant
pmidi -p 65:0 test.mid
et vous devriez entendre le son midi. Chouette !
Utiliser TiMidity comme synthétiseur logiciel
Téléchargez le paquetage TiMidity++-2.11.3.tar.gz (voir références à la fin)
décompressez-le (tar zxvf TiMidity++-2.11.3.tar.gz) et éditez le fichier common.makefile.in.
Décommentez la ligne CFLAGS pour pentium gcc:
CFLAGS = -O3 -mpentium -march=pentium
-fomit-frame-pointer \
-funroll-all-loops -malign-double -ffast-math
Vous pouvez maintenant configuer timidity avec de nombreuses et agréables interfaces graphiques,
mais nous nous intéresserons d'abord à l'option "--enable-alsaseq".
Cependant, cela ne fait pas de mal d'activer une interface graphique :
./configure --enable-ncurses --enable-xaw
--enable-spectrogram --enable-xaw=dynamic
--enable-audio=oss,alsa --enable-alsaseq
--prefix=/usr/local/timidity-2.11.3
make
make install
Ceci installe timidity dans /usr/local/timidity-2.11.3/bin pour ne pas écraser
une installation timidity déjà existante de votre distribution
linux. Nous installons timidity car je n'ai jamais vu aucune distribution linux
où l'interface alsaseq était activée.
Pour timidity vous avez aussi besoin de soundfonts. Ils sont cette fois, appelés fichiers instrument.
Un bon jeu complet de fichiers instrument est assez gros (environ 10Mo). La manière la plus rapide
de les obtenir consiste à installer les timidity++ à partir de votre distribution
(CDrom) et de copier les fichiers à partir de là (par exemple
téléchargement de timidity++-2.11.3-1.i386.rpm pour redhat 7.3). Pour copier les fichiers à partir de
/usr/share/timidity/instruments vers /usr/local/timidity-2.11.3/share/timidity/instruments tapez :
cd /usr
find share/timidity -print | cpio -dump
/usr/local/timidity-2.11.3
Nous sommes maintenant prêts à tester notre démarrage de timidity en tant que root:
/usr/local/timidity-2.11.3/bin/timidity -iA
-B2,8 -Os -EFreverb=0
TiMidity starting in ALSA server mode
set SCHED_FIFO
Opening sequencer port: 128:0 128:1
puis pmidi -l:
Port Client name Port name
128:0 Client-128 TiMidity port 0
128:1 Client-128 TiMidity port 1
Voila, nous avons 2 ports avec le synthétiseur TiMidity.
Tapez maintenant la commande
pmidi -p 128:0 test.mid
et vous devriez entendre le son midi.
/etc/modules.conf
Pour une configuration automatique et un chargement des modules, ajoutez ceci à votre fichier
/etc/modules.conf si vous possédez une carte soundblaster live:
alias char-major-116 snd
alias char-major-14 soundcore
alias snd-card-0 snd-card-emu10k1
alias sound-slot-0 snd-card-0
alias sound-service-0-0 snd-mixer-oss
alias sound-service-0-1 snd-seq-oss
alias sound-service-0-3 snd-pcm-oss
alias sound-service-0-8 snd-seq-oss
alias sound-service-0-12 snd-pcm-oss
alias midi snd-synth-emu10k1
below snd-seq-oss snd-synth-emu10k1
post-install snd-synth-emu10k1 /bin/sfxload
/etc/midi/8MBGMSFX.SF2 ; alsactl restore
# décommenter pour sauvegarder les paramètres de volume lors de l'arrêt de la machine:
#pre-remove snd-synth-emu10k1 alsactl store
Pour une carte différente sans synthétiseur midi, par exemple pour un chipset interne via686:
alias char-major-116 snd
alias char-major-14 soundcore
alias snd-card-0 snd-card-via686a
alias sound-slot-0 snd-card-0
alias sound-service-0-0 snd-mixer-oss
alias sound-service-0-3 snd-pcm-oss
alias sound-service-0-12 snd-pcm-oss
# restore original mixer:
post-install snd-card-via686a alsactl restore
# décommenter pour sauver les paramètres de volume lors de l'arrêt de la machine:
#pre-remove snd-synth-emu10k1 alsactl store
Pour lancer timidity automatiquement au démarrage, je suggère d'ajouter la ligne suivante
à votre fichier /etc/init.d/alsasound (ce script est installé avec le
pilote mais n'est pas actif.
Pour l'activer, utilisez la commande chkconfig)
echo "starting timidity"
timidity=/usr/local/timidity-2.11.3/bin/timidity # ne pas oublier le
"&" à la ligne suivante:
$timidity -iA -B2,8 -Os -EFreverb=0 > /dev/null &
Utilisation de alsa et midi
Vous avez utilisé le programme pmidi ci-dessus pour jouer les fichiers midi.
KDE inclut un très bon lecteur appelé kmid (ne pas confondre avec kmidi).
Kmid peut être compilé avec ou sans support alsa. Redhat l'a complié pour OSS.
Mandrake et Suse utilisent Alsa. Il est possible d'utiliser les binaires Mandrake avec Redhat.
Cet article a également pour but d'expliquer l'installation alsa requise pour d'autres programmes
qui seront présentés dans des articles à venir. Nous aurons par exemple un article sur Jazz. Jazz est un
séquenceur et un éditeur de fichiers midi. A la fin de l'article vous trouverez également
des références à d'autres applications.
Il existe aussi des programmes comme timidity (timidity -ig lancera l'interface graphique gtk)
ou kmidi (et non pas kmid) qui contiennent déjà le synthétiseur midi
logiciel. Dans ces cas-là, vous n'avez pas besoin du support
midi interne du noyau qu'il s'agisse de support matériel ou de l'émulation
logicielle timidity. En général,
il est préférable d'avoir une api midi commune plutôt que de redéfinir un synthétiseur midi dans chaque logiciel.
Alsa vit actuellement de grands changements. Comme mentionné plus tôt, la
version 0.9 n'est pas compatible avec la plupart des applications. Cependant la version 0.5
comme déjà précisé dans cet article, a également ses propres problèmes.
L'émulation du séquenceur OSS (/dev/sequencer) ne fonctionne pas (elle ne fonctionne qu'avec
les vieilles cartes soundblaster awe qui ne sont plus disponibles dans le commerce).
Ceci signifie que seuls les programmes midi compatibles alsa fonctionnent. Cela, espérons-le changera
avec la version 0.9. Toutefois, cet article est également utile pour
l'avenir, quand la version 0.9 sera mieux supportée, puisque seules des
"petites" choses, tels les noms des modules, ont changé entre
les versions 0.5 et 0.9. Les principes de base seront toujours les mêmes.
Références
Discussion sur cet article
Chaque article possède sa page de discussion. Vous pouvez y soumettre un commentaire ou lire ceux d´autres lecteurs:
2002-09-03, generated by lfparser version 2.27