Midi avec alsa

ArticleCategory: [Choisir une catégorie, ne pas traduire]

Applications

AuthorImage:[Merci de mettre une petite photo de vous]

[Photo de l'auteur]

TranslationInfo:[Auteur + historique de la traduction. mailto: ou http://homepage]

original in en Guido Socher

en to fr Hélène Duwelz

AboutTheAuthor :[Petite biographie de 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.

Abstract:[Ecrire un petit 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.

ArticleIllustration:[Ceci est le titre imagé de votre article]

[Illustration]

ArticleBody:[Corps de l'article]

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.

[alsamixer]

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

[kmid] 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