# 4.3 Erstellen einer Midi-Map

Es gibt leider keine Programme, um Midi-Maps zu erstellen. Sie müssen also die entsprechende Datei von Hand bearbeiten. Dazu genügt jeder Texteditor, insbesondere derjenige, den Sie normalerweise benutzen.

Eine Midi-Map ist eine Textdatei, die alle benötigten Umsetzungen für das Abspielen eines Stückes speichert.

Die Datei besteht aus vier Abschnitten: `PATCHMAP`, `KEYMAP`, `CHANNELMAP` und `OPTIONS`.

Jeder Abschnitt darf nur einmal erscheinen, außer dem `KEYMAP` -Abschnitt, der so oft erscheinen darf wie gewünscht. Voraussetzung dafür ist aber, daß jedes Auftreten eine unterschiedliche TextID besitzt (siehe unten).

Der allgemeine Aufbau einer Midi-Map ist wie folgt:

     DEFINE PATCHMAP
     ...
     END

     DEFINE KEYMAP "Name der Keymap"
     ...
     END

     DEFINE KEYMAP "Eine weitere Keymap"
     ...
     END

     DEFINE CHANNELMAP
     ...
     END

     OPTIONS
     ...
     END

Sie sehen, daß `DEFINE` gebraucht wird, um anzuzeigen, daß ein Abschnitt beginnt (außer für `OPTIONS`) und `END`, daß das Ende eines Abschnittes erreicht ist.

Sie können Kommentare einfügen, indem Sie am Anfang der Zeile ein `#`-Zeichen setzen.

Bitte schicken Sie mir Ihre Map-Datei als Email, damit ich in zukünftigen Versionen von KMid Unterstützung bieten kann für Geräte, die nicht General-Midi-kompatibel sind.

## 4.3.1 Der `PATCHMAP` Abschnitt

In diesem Abschnitt wird angegeben, wie die Patches von General Midi auf Ihr spezifisches Keyboard abgebildet werden. Der allgemeine Gebrauch sieht wie folgt aus:

     (Name des GM Patch)=(N) [AllKeysTo M]

Wobei `N` die Nummer ist, die Ihr Keyboard braucht, um Patches empfangen zu können.

Bitte beachten Sie, daß die linke Seite des Gleichheitszeichens ignoriert wird. Es wird angenommen, daß die General Midi Patches in der richtigen Reihenfolge vorliegen (von 0 bis 127), Sie dürfen die Reihenfolge also nicht ändern und auch keine Zeile für eines der 128 Instrumente weglassen.

Das optionale `AllKeysTo M` wird gebraucht, um alle Töne, die dieses Instrument brauchen, auf den Ton mit der Nummer M zu legen. Wenn Ihr Keyboard zum Beispiel keinen `Gewehrschuß` unterstützt (General Midi Patch 127), können Sie eine Trommel (z.B. mit Ton 60) nehmen, die ähnlich wie ein Gewehrschuß tönt. Dazu tragen Sie folgendes in den `PATCHMAP` Abschnitt ein:

     Gewehrschuß       =100 AllKeysTo 60

Wenn jetzt also eine Midi-Datei eine Note mit Patch 127 (Gewehrschuß) spielen soll, nimmt es Patch 100 (die Trommel auf Ihrem Keyboard) und spielt den Ton 60, unabhängig davon, welcher Ton in der Midi-Datei steht.

Bitte beachten Sie, daß hier mit dem Begriff "Trommel-Patch" der Patch gemeint ist, wo jeder Ton ein anderes Perkussionsinstrument (Trommel, Tschinelle, Maracas usw.) darstellt und nicht derjenige, wo der Ton die Tonhöhe der immer gleichen Trommel bedeutet (wie ihn manche Keyboards besitzen).

## 4.3.2 Der `KEYMAP` Abschnitt

Der `KEYMAP` Abschnitt wird gebraucht, um anzugeben, wie Töne auf einem bestimmten Kanal oder Instrument abgebildet werden. Der Gebrauch ist:

     DEFINE KEYMAP "Name der Keymap"
     C 0 =0
     C#0 =1
     D 0 =2
     ...
     END

Wie beim `PATCHMAP` Abschnitt ist die Reihenfolge der Zeilen sehr wichtig, ebenso deren Vorhandensein. Sie müssen also 128 Einträge erstellen.

Sie können für jeden Kanal und jedes Instrument mehrere Keymaps definieren. Sie müssen nur in der ersten Zeile verschiedene Namen verwenden.

Keymaps werden vor allem gebraucht, um Töne auf den Perkussions-Kanal abzubilden. Schauen Sie sich als Beispiel die mitgelieferten Keymaps an.

## 4.3.3 Der `CHANNELMAP` Abschnitt

Dieser Abschnitt kann gebraucht werden, um einige Kanäle auf andere abzubilden. Wenn Sie zum Beispiel den ersten und den zweiten Kanal vertauschen wollen, machen Sie das ganz einfach im `CHANNELMAP` Abschnitt.

Allerdings sind diese Einstellungen nützlicher für Keyboards, welche die Perkussion auf einem bestimmten Kanal haben (General Midi auf Kanal 10, andere brauchen die Kanäle 16 oder 9).

Midi-Geräte brauchen 16 Kanäle, der `CHANNELMAP` Abschnitt hat also 16 Zeilen, numeriert von 0 bis 15, aufgebaut nach folgendem Muster:

     (N) = (M) [Keymap "Name"] [ForcePatch x]

`N` ist dabei der Kanal, welcher auf den Kanal `N` abgebildet wird. Wenn Sie die `Keymap` Option benutzen, wird die Keymap mit dem Namen `Name` für diesen Kanal gebraucht. Die entsprechende Keymap muß natürlich weiter vorne in der Datei definiert sein! Wenn Sie die `ForcePatch` Option benutzen, werden alle Ereignisse ignoriert, die den Patch auf diesem Kanal zu ändern versuchen. In diesem Fall wird dann immer Patch `x` benutzt.

Die `ForcePatch` Option kann zum Beispiel nützlich sein, um immer den Perkussions-Patch auf dem Perkussions-Kanal zu benutzen.

## 4.3.4 Der `OPTIONS` Abschnitt

Im `OPTIONS` Abschnitt können Sie einige ganz nützliche Einstellungen vornehmen:

     OPTIONS
     PitchBenderRatio = r
     MapExpressionToVolumeEvents
     END

Sie können eine, keine oder beide Einstellungen angeben.

Der Wert für `PitchBenderRatio` gibt an, in welchem Verhältnis Pitch-Bender-Ereignisse multipliziert werden. Wenn also eine Midi-Datei ein Pitch-Bender-Ereignis sendet mit dem Wert `n`, wird dieses mit der Formel `n*(r/4096)` umgerechnet und dann erst weitergeleitet. Der Wert `4096` wird benutzt, damit in der Map-Datei keine Dezimalkommas stehen).

Diese Einstellung wird gebraucht, weil General Midi vorgibt, daß ein Keyboard, das ein Pitch-Bender-Ereignis erhält mit dem Wert 4096, einen Ton höher spielen soll. Leider versuchen aber einige Keyboards um zwei Töne bis zu einer Oktave höher zu spielen. Um den richtigen Wert auf Ihrem Keyboard zu finden, müssen Sie ein bißchen mit KMid rumprobieren.

Wenn die Einstellung `MapExpressionToVolumeEvents` gebraucht wird und eine Midi-Datei ein Ausdruckereignis schickt, wird dieses in ein Lautstärkeereignis umgewandelt. Dieses hat den gleichen Effekt, wird aber von mehr Keyboards verstanden. Viele Midi-Dateien brauchen Ausdrucksereignisse, um am Schlusß eines Liedes auszublenden. Wenn Sie also wollen, daß die Musik immer leiser und leiser wird, können Sie diese Einstellung ausprobieren. Vielleicht funktioniert es auch mit Ihrem Synthesizer.