<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
  <head>
    <meta name="generator" content=
    "HTML Tidy for Linux/x86 (vers 1st February 2002), see www.w3.org">
    <!-- this stylesheet will later on be added by lfparser automatically: -->
<style type="text/css">
<!--
  pre { font-family:monospace,Courier }
  p.code { width:80%; alignment:center; background-color:#aedbe8; border-style:no ne; border-width:medium; border-color:#aedbe8; padding:0.1cm ; text-align:left }

-->
</style>

    <title>Midi mit alsa</title>
  </head>

  <body>
    <h1>Midi mit Alsa</h1>

    <h4>ArticleCategory: [Choose a category, do not translate
    this]</h4>
    Applications 

    <h4>AuthorImage:[Here we need a little image from you]</h4>
    <img src="../../common/images/Guido-S.gif" alt=
    "[Photo of the Author]" height="164" width="173"> 

    <h4>TranslationInfo:[Author + translation history. mailto: or
    http://homepage]</h4>

    <p>original in en <a href="http://linuxfocus.org/~guido/">Guido
    Socher</a></p>

    <p>en to de <a href="http://linuxfocus.org/~guido/">Guido
    Socher</a></p>

    <h4>AboutTheAuthor:[A small biography about the author]</h4>

    <p>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.</p>

    <h4>Abstract:[Here you write a little summary]</h4>
    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.<br>
     <br>
    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. <br>
    <br>
    Dieser Artikel erklärt, wie man Alsa (advanced linux sound
    architecture) als Interface zu einem Midi Synthesizer benutzt. 

    <h4>ArticleIllustration:[This is the title picture for your
    article]</h4>
    <img src="../../common/images/article259/miditux.gif" width=
    "125" height="149" alt="[Illustration]" hspace="10"> 

    <h4>ArticleBody:[The article body]</h4>

    <h2>Einführung</h2>
    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 <a href="../../common/src/article259/SOUNDCARDS.html">die
    Liste der von Alsa unterstützten Karten</a> 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. <br>
     <br>
    Wenn du keine Soundblaster live Karte hast, dann kann man Midi
    Synthesis in Software emulieren und ich werde erklären
    wie das geht. 

    <h2>Was man braucht</h2>
    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.)<br>
     Die Dateien für 0.5 sind: 

    <ul>
      <li><a href=
      "../../common/src/article259/alsa-driver-0.5.12a.tar.bz2">alsa-driver-0.5.12a.tar.bz2</a></li>

      <li><a href=
      "../../common/src/article259/alsa-lib-0.5.10b.tar.bz2">alsa-lib-0.5.10b.tar.bz2</a></li>

      <li><a href=
      "../../common/src/article259/alsa-utils-0.5.10.tar.bz2">alsa-utils-0.5.10.tar.bz2</a></li>
    </ul>
    Informationen darüber, wie man Alsa kompiliert, findet man
    in der Alsa HOWTO (siehe Referenzen). Im Prinzip muß man
    folgendes machen: 

    <p class="code">tar jxvf alsa-driver-0.5.12a.tar.bz2<br>
     cd alsa-driver-0.5.12a<br>
     ./configure --with-sequencer=yes --with-oss=yes
    --with-isapnp=no<br>
     make<br>
     make install<br>
     ./snddevices</p>
    Das ist für den "driver" und "./configure;make;make
    install" für den Rest. <br>
     <br>
    Nach der Installation kann man die Module in den Kernel laden.
    Für Soundblaster live (=emu10k1 Chip) ist das: 

    <p class="code">modprobe snd-card-emu10k1<br>
     modprobe snd-synth-emu10k1<br>
     modprobe snd-seq-midi<br>
     modprobe snd-pcm-oss<br>
     modprobe snd-mixer-oss<br>
     modprobe snd-seq-oss<br>
    </p>
    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).<br>
     <br>
    Nun ist es Zeit zu testen, ob der Sound funktioniert.
    Starte das Programm<br>
    alsamixer <br>
    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. <br>
     <br>
     <img src="../../common/images/article259/alsamixer.gif" width=
    "578" height="376" alt="[alsamixer]"> <br>
     <br>
    Um die Einstellungen in /etc/asound.conf zu speichern, benutzt
    man: 

    <p class="code">/usr/sbin/alsactl store</p>
    Nun kann man mit 

    <p class="code">play <a href=
    "../../common/src/article259/flute.wav">flute.wav</a></p>
    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 (<a href=
    "../../common/src/article259/devices.html">meine Dateien</a>).
    <br>
     <br>
    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.<br>
    <br>
     

    <h2>Midi</h2>
    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. <br>
     <br>
     <b>Den Soundfont laden</b><br>
     <br>
    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 <a href=
    "http://mitglied.lycos.de/iwai/awedrv.html">http://mitglied.lycos.de/iwai/awedrv.html</a>).
    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: 

    <p class="code">/bin/sfxload /etc/midi/8MBGMSFX.SF2</p>
    Ein gutes Testprogramm ist pmidi (siehe Referenzen). Der Befehl
    <br>
     pmidi -l<br>
    sollte folgendes anzeigen: 

    <p class="code">Port Client name Port name<br>
     64:0 External MIDI 0 MIDI 0-0<br>
     65:0 Emu10k1 WaveTable Emu10k1 Port 0<br>
     65:1 Emu10k1 WaveTable Emu10k1 Port 1<br>
     65:2 Emu10k1 WaveTable Emu10k1 Port 2<br>
     65:3 Emu10k1 WaveTable Emu10k1 Port 3</p>
    Nun tippe

    <p class="code">pmidi -p 65:0 <a href=
    "../../common/src/article259/test.mid">test.mid</a></p>
    und du solltest Midi Sound hören. <br>
     <br>
     <b>TiMidity als Software Synthesizer</b><br>
     <br>
    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: 

    <p class="code">CFLAGS = -O3 -mpentium -march=pentium
    -fomit-frame-pointer \<br>
     -funroll-all-loops -malign-double -ffast-math</p>
    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: 

    <p class="code">./configure --enable-ncurses --enable-xaw
    --enable-spectrogram --enable-xaw=dynamic
    --enable-audio=oss,alsa --enable-alsaseq
    --prefix=/usr/local/timidity-2.11.3<br>
     make<br>
     make install</p>
    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.<br>
    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 <a href=
    "http://rpmfind.net//linux/RPM/redhat/7.3/i386/timidity++-2.11.3-1.i386.html">
    timidity++-2.11.3-1.i386.rpm, Download für Redhat 7.3</a>. Um
    die Dateien von /usr/share/timidity/instruments nach
    /usr/local/timidity-2.11.3/share/timidity/instruments zu
    kopieren, benutzt man folgenden Befehl: 

    <p class="code">cd /usr<br>
     find share/timidity -print | cpio -dump
    /usr/local/timidity-2.11.3</p>
    Nun können wir timidity testen: 

    <p class="code">/usr/local/timidity-2.11.3/bin/timidity -iA
    -B2,8 -Os -EFreverb=0<br>
     TiMidity starting in ALSA server mode<br>
     set SCHED_FIFO<br>
     Opening sequencer port: 128:0 128:1<br>
    </p>
    und dann pmidi -l: 

    <p class="code">Port Client name Port name<br>
     128:0 Client-128 TiMidity port 0<br>
     128:1 Client-128 TiMidity port 1<br>
    </p>
    Voila, wir haben 2 Ports mit dem TiMidity Synthesizer. <br>
    Nun kann man mit 

    <p class="code">pmidi -p 128:0 <a href=
    "../../common/src/article259/test.mid">test.mid</a></p>
    Musik erzeugen. 

    <h2>/etc/modules.conf</h2>
    Zur automatischen Konfiguration und zum Laden der Module kann
    man folgendes in /etc/modules.conf eintragen, falls man eine
    Soundblaster live Karte hat: 

    <p class="code">alias char-major-116 snd<br>
     alias char-major-14 soundcore<br>
     alias snd-card-0 snd-card-emu10k1<br>
     alias sound-slot-0 snd-card-0<br>
     alias sound-service-0-0 snd-mixer-oss<br>
     alias sound-service-0-1 snd-seq-oss<br>
     alias sound-service-0-3 snd-pcm-oss<br>
     alias sound-service-0-8 snd-seq-oss<br>
     alias sound-service-0-12 snd-pcm-oss<br>
     alias midi snd-synth-emu10k1<br>
     below snd-seq-oss snd-synth-emu10k1<br>
     post-install snd-synth-emu10k1 /bin/sfxload
    /etc/midi/8MBGMSFX.SF2 ; alsactl restore<br>
     # uncomment to save volume settings at shutdown:<br>
     #pre-remove snd-synth-emu10k1 alsactl store<br>
    </p>
    Für eine andere Karte ohne Midi Synthesizer, z.B. eine
    interne via686: 

    <p class="code">alias char-major-116 snd<br>
     alias char-major-14 soundcore<br>
     alias snd-card-0 snd-card-via686a<br>
     alias sound-slot-0 snd-card-0<br>
     alias sound-service-0-0 snd-mixer-oss<br>
     alias sound-service-0-3 snd-pcm-oss<br>
     alias sound-service-0-12 snd-pcm-oss<br>
     # restore original mixer:<br>
     post-install snd-card-via686a alsactl restore<br>
     # uncomment to save volume settings at shutdown:<br>
     #pre-remove snd-synth-emu10k1 alsactl store<br>
    </p>
    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: 

    <p class="code">echo "starting timidity"<br>
     timidiy=/usr/local/timidity-2.11.3/bin/timidity # do not
    forget the "&amp;" in the next line:<br>
     $timidity -iA -B2,8 -Os -EFreverb=0 &gt; /dev/null &amp;<br>
    </p>

    <h2>Alsa und Midi nutzen</h2>
    <a href="../../common/images/article259/kmid.gif"><img src=
    "../../common/images/article259/kmid_th.gif" width="166"
    height="148" alt="[kmid]" hspace="10" vspace="10" align=
    "right"></a> 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. <br><br>
    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. <br>
     <br>
    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. <br>
    <br>
    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. 

    <h2>Referenzen</h2>

    <ul>
      <li>Alsa howto: <a href=
      "http://www.amelek.gda.pl/avr/">www.amelek.gda.pl/avr/</a><br>

      </li>

      <li>Das Alsa Projekt: <a href=
      "http://www.alsa-project.org/">http://www.alsa-project.org/</a></li>

      <li>TiMidity++-2.11.3.tar.gz von diesem Server
      herunterladen:<a href=
      "../../common/src/article259/TiMidity++-2.11.3.tar.gz">TiMidity++-2.11.3.tar.gz</a></li>

      <li>Timidity Sofware Midi Synthesizer:<a href=
      "http://www.goice.co.jp/member/mo/timidity/dist/">http://www.goice.co.jp/member/mo/timidity/dist/</a></li>

      <li>Midi-howto: <a href=
      "http://www.midi-howto.com/">http://www.midi-howto.com/</a></li>

      <li>pmidi Midi Spieler: <a href=
      "../../common/src/article259/pmidi-1.4.2.tar.gz">pmidi-1.4.2.tar.gz</a><br>

       (von http://download.sourceforge.net/pmidi/ oder
      http://www.parabola.demon.co.uk/alsa/pmidi.html )</li>

      <li>Eine kurze und lange Midi Datei zum Testen: <a href=
      "../../common/src/article259/test.mid">test.mid</a> <a href=
      "../../common/src/article259/bigstar.mid">bigstar.mid</a></li>

      <li><a href="../../common/src/article259/index.html">Download
      Seite für diesen Artikel</a><br>
      </li>

      <li>Midi Applikationen für Linux <a href=
      "http://www.linuxsound.at/midi.html">http://www.linuxsound.at/midi.html</a></li>

      <li>Sound &amp; MIDI Software für Linux <a href=
      "http://linux-sound.org/one-page.html">http://linux-sound.org/one-page.html</a>
      (or http://www.linuxsound.at)</li>
    </ul>
    <!-- vim: set sw=2 ts=2 et tw=80: -->
  </body>
</html>