Midi mit Alsa
ArticleCategory: [Choose a category, do not translate
this]
Applications
AuthorImage:[Here we need a little image from you]
TranslationInfo:[Author + translation history. mailto: or
http://homepage]
original in en Guido
Socher
en to de Guido
Socher
AboutTheAuthor:[A small biography about the author]
Guido mag Linux nicht nur, weil es Spa� macht, die
gro�artigen M�glichkeiten, die dieses System bietet
zu entdecken, sondern auch wegen der Leute, die an seiner
Entwicklung beteiligt sind.
Abstract:[Here you write a little summary]
Midi ist ein Dateiformat, das keinen ge-sampelten digitalen
Sound enth�lt, sondern eine Beschreibung, wie der Sound zu
erzeugen ist. Das ist vergleichbar mit einem Notenblatt, wo jede
Note einen Ton angibt. Mididateien sind daher sehr klein im
Vergleich zu wav Dateien.
Um Midi in T�ne zu verwandeln, braucht man einen Midi
Synthesizer. Das ist ein St�ck Hardware oder Software, in
dem digitale Soundsamples eines Instruments (z.B Klavier)
benutzt werden, um aus dem Midi T�ne zu machen. Die
Soundsamples werden als "soundfont" bezeichnet.
Dieser Artikel erkl�rt, wie man Alsa (advanced linux sound
architecture) als Interface zu einem Midi Synthesizer benutzt.
ArticleIllustration:[This is the title picture for your
article]
ArticleBody:[The article body]
Einf�hrung
Bis vor einigen Jahren konnte man bekannte Soundkarten wie
"Gravis UltraSound" oder "SoundBlaster Gold" in jedem
Computerladen finden. Beide Karten hatten interne Hardware-Midi-
Synthesizer. Leider kann man diese Karten nicht mehr kaufen.
Selbst wenn es sie g�be, w�ren sie nutzlos, da es ISA
Bus Karten waren. Heutige Computer benutzen PCI Bus und haben
oft schon im Chipset auf dem Motherboard einen Soundchip. Kaum
einer dieser Chips unterst�tzt Midi Synthese. Ein Blick
auf die
Liste der von Alsa unterst�tzten Karten zeigt,
da� es sehr viele Karten gibt. Du wirst dich jetzt
vermutlich fragen, welche du kaufen sollst. Leider ist die
Entscheidung ganz einfach. Es gibt nur eine Karte, die man heute
im Computerladen findet, die auch Midi Synthese
unterst�tzt: Soundblaster live.
Wenn du keine Soundblaster live Karte hast, dann kann man Midi
Synthesis in Software emulieren und ich werde erkl�ren
wie das geht.
Was man braucht
Alsa ist im Augenblick in einer �bergangsphase. Der
stabile Release ist 0.5 und wird langsam alt. Die Version 0.9
ist aber noch nicht ganz ausgereift. Wenn man Anwendungen mit
Midi benutzen m�chte, dann braucht man im Augenblick noch
0.5, weil es kaum Anwendungen f�r 0.9 gibt und sich die
Programmierschnittstelle ge�ndert hat. (Beachte: PCM
sampeled sound, wav Dateien, und Applikationen basierend auf
gesampeltem Sound sind kein Problem mit Version 0.9. Ich
spreche hier von Midi.)
Die Dateien f�r 0.5 sind:
Informationen dar�ber, wie man Alsa kompiliert, findet man
in der Alsa HOWTO (siehe Referenzen). Im Prinzip mu� man
folgendes machen:
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
Das ist f�r den "driver" und "./configure;make;make
install" f�r den Rest.
Nach der Installation kann man die Module in den Kernel laden.
F�r Soundblaster live (=emu10k1 Chip) ist das:
modprobe snd-card-emu10k1
modprobe snd-synth-emu10k1
modprobe snd-seq-midi
modprobe snd-pcm-oss
modprobe snd-mixer-oss
modprobe snd-seq-oss
F�r andere Karten mu� man einfach die ersten zwei
Zeilen durch das Modul f�r die entsprechende Karte
ersetzen (z.B snd-card-via686a f�r eine interne Karte
basierend auf dem via 686 Chip). Mandrake und Suse
unterst�tzen Alsa und dort kann man auch die
Hardwareerkennung und Konfiguration der Distribution benutzen
(harddrake und yast2). Falls du �berhaupt keine Ahnung
hast, was f�r ein Chip in deinem Rechner steckt, dann
probier mal "lspci -v" (der lspci Befehl geh�rt zu einem
Paket namens pciutils).
Nun ist es Zeit zu testen, ob der Sound funktioniert.
Starte das Programm
alsamixer
und tippe "m" zum un-mute des master und pcm Kanals (un-mute =
nicht stummschalten). Mit den Pfeiltasten kann man die
Lautst�rke einstellen. Mit Esc wird das Programm
verlassen.
Um die Einstellungen in /etc/asound.conf zu speichern, benutzt
man:
/usr/sbin/alsactl store
Nun kann man mit
play flute.wav
einen Fl�tenton h�ren. Falls nicht, gehe zu
/proc/asound und �berpr�fe /proc/asound/devices und
/proc/asound/oss-devices. Dort sollte es "mixer" und "digital
audio" geben (meine Dateien).
Das war ein Test der pcm oss Emulation und Sound im
allgemeinen. Weiter unten werde ich erkl�ren, wie man mit
/etc/modules.conf alles automatisch machen kann. Der
n�chste Schritt ist jedoch, Midi zum laufen zu bringen.
Midi
Wenn du eine Soundkarte mit internem Midi Synthesizer
(Soundblaster live) hast, dann mu� man die "soundfonts"
(gesampelte Instrumente) in den Chip der Soundkarte laden. Wenn
du keine solche Karte hast, dann kannst du timidity installieren
(siehe Referenzen f�r einen URL zum Download) und timidity
als Alsa Midi Synthesizer benutzen. F�r Programme, die
oberhalb von Alsa laufen, ist kein Unterschied zwischen dem
Hardware Synthesizer und timidity zu sehen.
Den Soundfont laden
Du solltest �berpr�fen, da� das Programm
sfxload (/bin/sfxload) installiert ist. Wenn nicht, dann
installiere es jetzt, Es ist Teil eines Paketes namens awesfx
(auf den CDs deiner Linuxdistribution oder http://mitglied.lycos.de/iwai/awedrv.html).
Als n�chstes kopiere die Datei 8MBGMSFX.SF2 von deiner
Soundblaster Live CD
(/mnt/cdrom/AUDIO/Common/SFBANK/8MBGMSFX.SF2) nach
/etc/midi/8MBGMSFX.SF2. Der Soundfont wird mit folgendem Befehl
geladen:
/bin/sfxload /etc/midi/8MBGMSFX.SF2
Ein gutes Testprogramm ist pmidi (siehe Referenzen). Der Befehl
pmidi -l
sollte folgendes anzeigen:
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
Nun tippe
pmidi -p 65:0 test.mid
und du solltest Midi Sound h�ren.
TiMidity als Software Synthesizer
Lade TiMidity++-2.11.3.tar.gz (siehe Referenzen am Ende)
herunter und entpacke es (tar zxvf TiMidity++-2.11.3.tar.gz).
Editiere die Datei common.makefile.in. Hier kommentiert man die
CFLAGS Zeile f�r pentium gcc aus:
CFLAGS = -O3 -mpentium -march=pentium
-fomit-frame-pointer \
-funroll-all-loops -malign-double -ffast-math
Nun kann man timidity f�r verschiedene grafische
Oberfl�chen konfigurieren, aber wir sind haupts�chlich
an "--enable-alsaseq" interessiert. Es schadet aber nicht, wenn
man das Program auch �ber eine grafische Oberfl�che
steuern kann:
./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
Das installiert timidity nach /usr/local/timidity-2.11.3/bin, um
eine bereits existierende timidity Installation aus deiner
Linuxdistribution nicht zu �berschreiben. Wir installieren
timidity hier selbst, weil ich keine einzige Distribution kenne,
die timidity f�r das alsaseq Interface konfiguriert
hat.
F�r timidity braucht man auch Soundfonts. Diese nennen
sich hier "instrument files". Ein guter und kompletter Satz von
Instrumenten ist ziemlich gro� (ca. 10Mb). Am
schnellsten kommst du an diese Dateien heran, wenn du sie aus
der timidity++ Installation deiner Linuxdistribution kopierst.
Oder z.B. von
timidity++-2.11.3-1.i386.rpm, Download f�r Redhat 7.3. Um
die Dateien von /usr/share/timidity/instruments nach
/usr/local/timidity-2.11.3/share/timidity/instruments zu
kopieren, benutzt man folgenden Befehl:
cd /usr
find share/timidity -print | cpio -dump
/usr/local/timidity-2.11.3
Nun k�nnen wir timidity testen:
/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
und dann pmidi -l:
Port Client name Port name
128:0 Client-128 TiMidity port 0
128:1 Client-128 TiMidity port 1
Voila, wir haben 2 Ports mit dem TiMidity Synthesizer.
Nun kann man mit
pmidi -p 128:0 test.mid
Musik erzeugen.
/etc/modules.conf
Zur automatischen Konfiguration und zum Laden der Module kann
man folgendes in /etc/modules.conf eintragen, falls man eine
Soundblaster live Karte hat:
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
# uncomment to save volume settings at shutdown:
#pre-remove snd-synth-emu10k1 alsactl store
F�r eine andere Karte ohne Midi Synthesizer, z.B. eine
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
# uncomment to save volume settings at shutdown:
#pre-remove snd-synth-emu10k1 alsactl store
Um timidiy automatisch w�hrend des Booten zu starten,
sollte man folgende Zeile in /etc/init.d/alsasound (diese Datei
wird mit dem Alsa Driver installiert, ist aber nicht aktiv. Mit
chkconfig kann sie f�r Runlevel 3+5 aktiviert werden)
einf�gen:
echo "starting timidity"
timidiy=/usr/local/timidity-2.11.3/bin/timidity # do not
forget the "&" in the next line:
$timidity -iA -B2,8 -Os -EFreverb=0 > /dev/null &
Alsa und Midi nutzen
Wir haben oben schon das pmidi Programm benutzt, um
Midi Dateien abzuspielen. KDE enth�lt ein Programm namens
kmid (nicht zu verwechseln mit kmidi). Kmid kann man mit oder
ohne Alsa Unterst�tzung kompilieren. Redhat hat es nur
f�r OSS kompiliert. Mandrake und Suse nutzen Alsa. Man
kann die Mandrake Dateien unter Redhat benutzen.
Dieser Artikel ist auch ein vorbereitender Artikel f�r
andere Artikel �ber Musikprogramme. Wir werden z.B. einen
Artikel zu Jazz haben. Jazz ist ein Midi Sequencer und Editor.
Am Ende des Artikels findet sich eine Liste mit Referenzen zu
anderen Musikprogrammen.
Es gibt auch andere Programme wie timidiy (timidity -ig wird
z.B. timidity mit gtk Oberfl�che starten) oder kmidi
(nicht kmid), die schon einen Software Synthesizer enthalten.
In diesem Fall braucht man auf Kernelebene kein Midi (ob in
Hardware oder durch timidity emuliert). Im allgemeinen ist es
jedoch besser, ein gemeinsames Midi API zu haben und nicht Midi
in jedem Programm neu zu implementieren.
Alsa durchl�uft im Augenblick gro�e
Ver�nderungen. Wie schon vorher gesagt, funktioniert
Version 0.9 mit den meisten Applikationen nicht. Die Version
0.5, wie sie hier besprochen wurde, hat jedoch auch Probleme.
Die OSS Sequencer Emulation (/dev/sequencer) funktioniert
nicht. Sie funktioniert nur mit Soundblaster AWE Karten, die
man nicht mehr kaufen kann. Das bedeutet, da� nur
Programme, die auch f�r Alsa geschrieben wurden,
funktionieren werden. Das wird sich hoffentlich mit Version 0.9
�ndern. Dieser Artikel sollte aber auch in Zukunft noch
seinen Wert haben, wenn Version 0.9 weiter verbreitet ist, da
sich eigentlich nur "Kleinigkeiten" ge�ndert haben. So
sind z.B. die Namen der Kernelmodule anders, aber das
grunds�tzliche Vorgehen ist gleich.
Referenzen