19.9. ALSA und Midi

Neben der Möglichkeit PCM-Daten wiederzugeben verfügen viele Soundkarten auch über Midi-Funktionalität. Der ALSA Midi-Sequenzer implementiert eine kraftvolle Architektur für das Routing von Midi-Daten. Sie benötigen die Pakete pmidi, aseqview, vkeybd, awesfx, snd_sf2 sowie kalsatools.

Viele Soundkarten besitzen einen externen Midi-Port zum Anschluss von Midi-Geräten wie Synthesizern, Keyboards und Klangmodulen. Wird der Midi-Port der Karte von ALSA unterstützt, können Sie über diesen Port mit einem Sequenzer-Programm (zum Beispiel jazz) Midi-Dateien aufnehmen und wiedergeben. Einen Überblick über die von Ihrer Karte zur Verfügung gestellten Midi-Devices erhalten Sie im KDE-Kontrollzentrum unter dem Menüpunkt Sound & Multimedia->Sound-System->Midi. Hier können Sie auch einstellen, welches dieser Devices zur Wiedergabe von Midi-Dateien verwendet werden soll. Auf der Kommandozeile können Sie sich die zur Verfügung stehenden Midi-Devices sowie deren interne ALSA Port-Nummern mit dem Kommando pmidi -l auflisten lassen. Bei einer Soundblaster Live!-Karte sieht dieses Listing aus wie in Ausgabe 19.1. “Midi-Devices einer Soundblaster Live!”.

Beispiel 19.1. Midi-Devices einer Soundblaster Live!

Port     Client name                       Port name
72:0     External MIDI 0                   MIDI 0-0
73:0     Emu10k1 WaveTable                 Emu10k1 Port 0
73:1     Emu10k1 WaveTable                 Emu10k1 Port 1
73:2     Emu10k1 WaveTable                 Emu10k1 Port 2
73:3     Emu10k1 WaveTable                 Emu10k1 Port 3

In der ersten Spalte steht die interne Port-Nummer, unter der das Device vom ALSA-Treiber angesprochen wird. In den übrigen Spalten stehen Bezeichnung und Portname des Device. Neben dem bereits erwähnten externen Midi-Port tauchen hier mehrere WaveTable-Ports auf. Mit einem Kommando wie pmidi -p 73:0 mysong.mid können Sie eine Midi-Datei über einen der aufgelisteten Ports spielen lassen.

[Important]Wichtig

Wird ein Midi-Spieler während der Wiedergabe abgebrochen, bleibt möglicherweise ein dauerhafter Klang zurück. Rufen Sie in diesem Fall das Skript all_notes_off auf. Wenn das nicht funktioniert, können Sie ALSA mit rcalsasound restart als root neu starten.

Viele Soundkarten (zum Beispiel Soundblaster AWE und Live!) besitzen einen internen WaveTable-Synthesizer. Dieser wandelt Midi-Ereignisse in hörbare Klänge um. Diese Midi-Ereignisse können entweder von einem externen Midi-Keyboard oder von einem Programm (zum Beispiel Midi-Player oder Sequenzer) an den WaveTable-Synthesizer geschickt werden. Bei Soundblaster-AWE- und -Live!-Karten muss der WaveTable Synthesizer mit einem so genannten Soundfont initialisiert werden, bevor Klänge hörbar werden.

19.9.1. Soundfonts laden: SB Live! und AWE

Das Paket awesfx enthält das Kommando sfxload zum Laden von Sound­fonts in Soundblaster AWE und Live! Karten. Geeignete Soundfont-Dateien befinden sich zum Beispiel auf der Treiber-CD Ihrer Soundkarte. Das Startup-Skript von ALSA kann die für die WaveTable-Synthese benötigten Soundfonts automatisch laden. Voraussetzung dafür ist, dass mit YaST2 entsprechende Dateien von der Creative Driver CD installiert wurden. Das Skript funktioniert momentan nur für eine Soundkarte. ALSA kann aber problemlos bis zu 8 Soundkarten verwalten.

Das Laden der Soundfonts erreichen Sie mit einem Kommando wie sfxload -D n /usr/share/sfbank/creative/8MBGMSFX.SF2. n steht dabei für die Nummer der Soundkarte (0, 1…). Zu beachten ist, dass n nicht notwendigerweise die Nummer ist, unter der die Soundkarte konfiguriert wurde, sondern von der Reihenfolge abhängt, mit der die einzelnen Soundtreiber geladen wurden.

Sie können auch einen der unter /usr/share/sounds/sf2 installierten Soundfonts laden. Der Soundfont Vintage_Dreams_Waves_v2.sf2 von Ian Wilson enthält 128 analoge Synthesizer-Klänge sowie 8 Drumsets. Er ist sowohl für SB-AWE-, als auch für -SB Live!-Karten geeignet. Der ROM-Soundfont gu11-rom.sf2 von Samuel Collins ist nur für SB AWE Karten geeignet. Er stellt für diese Karten eine erweiterte General Midi Bank zur Verfügung. Bitte beachten Sie die Copyright-Dateien und die Dokumentation unter /usr/share/doc/packages/snd_sf2. Weitere Soundfonts finden Sie im Internet zum Beispiel unter http://www.hammersound.net

19.9.2. vkeybd – virtuelles Midi-Keyboard

Abbildung 19.13. vkeybd – vollständige virtuelle Midi-Tastatur

vkeybd – vollständige virtuelle Midi-Tastatur

Falls Sie kein externes Midi-Keyboard an Ihre Soundkarte angeschlossen haben, können Sie das virtuelle Keyboard vkeybd verwenden. Hier werden die internen Port-Nummern wichtig, die wir oben bereits mit pmidi -l aufgelistet haben. Das Programm wird von der Kommandozeile aufgerufen mit vkeybd --addr 73:0 &. Die Portadresse muss für Ihr System angepasst werden. Geben Sie hier den ersten WaveTable-Port aus der Liste an. Wenn Sie einen externen Tongenerator angeschlossen haben, können Sie natürlich auch die Port-Nummer des externen Midi-Ports angeben.

vkeybd kennt noch eine Reihe weiterer Optionen. Mit vkeybd --addr 73:0 --octave 5 & können Sie zum Beispiel die Zahl der dargestellten Oktaven auf fünf erweitern. Eine Übersicht über die Kommandozeilenoptionen erhalten Sie mit vkeybd --help bzw. in der vkeybd.

Die in der Preset-Liste dargestellten Instrumentbezeichnungen können durch Angabe einer Preset-Datei mit der Option --preset konfiguriert werden. Die Instrumentnamen einer Soundfont-Datei können mit dem Kommando sftovkb extrahiert werden. Wechseln Sie mit cd /usr/share/sounds/sf2 in das richtige Verzeichnis und geben Sie den Befehl sftovkb Vintage_Dreams_Waves_v2.sf2 >~/vintage.vkb ein, um die Namen im Home-Verzeichnis in vintage.vkb zu speichern. Die Oberfläche von vkeybd lässt sich über das Menü view konfigurieren.

Die Zuordnung der Tasten zu den gesendeten MIDI Noten ist in der Datei ~/.vkeybdrc gespeichert. Hier sind Erweiterungen möglich. Für eine deutsche Tastatur finden Sie eine erweiterte Konfigurationsdatei unter /usr/share/doc/packages/vkeybd/vkeybdrc_german. Die Verwendung dieser Datei setzt voraus, dass vkeybd (mindestens) mit der Option --octave 5 gestartet wird. Wenn Sie eigene Modifikationen vornehmen möchten, können Sie die Bezeichnungen von Tastatur-Events mit dem Programm xev herausfinden.

19.9.3. Verbindungen zwischen Midi Ports herstellen

Abbildung 19.14. Mit kaconnect Midi-Ports verbinden und Status anzeigen

Mit kaconnect Midi-Ports verbinden und Status anzeigen

ALSA stellt eine leistungsfähige Infrastruktur zum Verbinden verschiedener Midi-Ports zur Verfügung. Soundkarten und Midi-Programme (sofern diese die ALSA-Sequenzer-Struktur unterstützen) besitzen einen oder mehrere Midi-Ports, über die sie miteinander kommunizieren können. Die Verbindung der Ports kann entweder mit dem KDE-Programm kaconnect oder dem Kommando aconnect vorgenommen werden. Nach dem Programmstart zeigt kaconnect die auf dem System verfügbaren lesbaren und schreibbaren MIDI-Ports sowie deren Verbindungsstatus an. Zu Demonstrationszwecken können Sie einmal mit vkeybd und aseqview zwei Midi-Programme starten. In der Verbindung zwischen Midi Ports ist nach dem Programmnamen die Portadresse des Programms angegeben. Das erste Programm erhält z. B. die Portnummer 128:0, das zweite 129:0. Die Ports der Programme werden auch unmittelbar von kaconnect angezeigt.

Da vkeybd ohne den Parameter --addr aufgerufen wurde, kann jetzt die Verbindung zwischen dem Programm-Port und dem WaveTable-Port (oder dem externen Midi-Port) per Hand hergestellt werden. Selektieren Sie dazu die entsprechenden Ports und klicken Sie dann auf connect. Falls Sie das Kommandozeilentool aconnect verwenden möchten, geben Sie aconnect 128:0 73:0 ein (oder die entsprechenden Ports). Damit wird eine (unidirektionale) Verbindung zwischen dem Port 128:0 als Sender und 73:0 als Empfänger hergestellt.

Sie können nun noch eine Verbindung zwischen dem Midi-Port des Keyboards und dem Midi-Port des ALSA Sequenzer Viewers herstellen. Falls Sie dann am Keyboard zum Beispiel das Panning ändern oder das Pitchwheel (muss erst unter View aktiviert werden) betätigen, wird dies sofort von aseqview angezeigt.

Mit aconnect -il bzw. aconnect -ol können Sie die zum Empfang bzw. Senden zur Verfügung stehenden Ports und ihren Verbindungsstatus auflisten. Die mit aconnect hergestellten Verbindungen können Sie mit der -d Option wieder lösen, also zum Beispiel mit aconnect -d 128:0 129:0. Wollen Sie sämtliche Verbindungen lösen, geht dies mit aconnect -x. Eine Übersicht über weitere Kommandozeilenoptionen von aconnect können Sie mit man aconnectnachlesen.

[Tip]Tipp

Mit aseqnet lassen sich Midi-Verbindungen auch im Netzwerk herstellen.

Abbildung 19.15. Splitzonen mit QMidiRoute einrichten

Splitzonen mit QMidiRoute einrichten

Erweitertes MIDI-Routing ermöglicht das Programm QMidiRoute. Dieses sortiert die auf dem schreibbaren MIDI-Port empfangenen MIDI-Events nach Tonhöhe, Anschlagstärke (Velocity) oder Kanal und gibt diese dann unmittelbar wieder auf den lesbaren Ports aus. Mit den Parametern Channel und Transpose können Sie den Kanal und die Tonhöhe der unteren Split-Zone ändern.

19.9.4. kmid – Der KDE Midi-Spieler

Abbildung 19.16. Hauptfenster und Kanalansicht von kmid

Hauptfenster und Kanalansicht von kmid

Wenn das kdemultimedia installiert ist, finden Sie im KDE-Startmenü unter Multimedia den Menüpunkt Midi/Karaoke-Spieler. Einige Demodateien für kmid liegen im Verzeichnis /opt/kde3/share/apps/kmid im .kar-Format vor. In diesen Dateien ist auch der Liedtext gespeichert, der synchron zur Wiedergabe gescrollt und markiert wird.

Die ausführliche Online-Hilfe von kmid kann mit F1 aufgerufen werden. Auch bei diesem Programm müssen wieder die Midi-Ports im Menü Einstellungen unter Midi-Einstellungen korrekt gewählt werden.

Bemerkenswert ist die Kanalansicht, die Sie erhalten, wenn Sie auf den Klaviatur-Button in der Werkzeugleiste klicken. Vergrößern Sie das Fenster entsprechend, werden die Midi-Ereignisse grafisch auf mehreren Klaviaturen gezeigt. Für jeden Kanal können die Instrumente einzeln geändert werden.

[Tip]Tipp

Wird kmid durch Klick auf eine Midi-Datei im KDE-Dateimanager Konqueror aufgerufen, gelten die im KDE-Kontrollzentrum eingestellten Midi-Einstellungen. Wird das Programm separat aufgerufen, gelten die im Programm selbst vorgenommenen Einstellungen.