# 4.3. Création d'une map midi

Il n'y a aucun programme pour générer des maps midi, donc vous devrez éditer un fichier à la main (en utilisant votre éditeur de texte préféré).

Une map midi est un fichier texte qui contient toutes les traductions nécessaires qui seront effectuées lors de la lecture de la séquence.

Elle est constituée de quatre sections : `PATCHMAP`, `KEYMAP`, `CHANNELMAP` et `OPTIONS`.

Chaque section ne doit apparaître qu'une seule fois, sauf la section `KEYMAP` qui peut apparaître autant de fois que nécessaire, pourvu que chaque occurence utilise un identificateur (TextID) différent (continuez à lire pour plus de détails).

La structure générale d'un fichier map est la suivante :

     DEFINE PATCHMAP
     ...
     END

     DEFINE KEYMAP "Nom de la Keymap"
     ...
     END

     DEFINE KEYMAP "Autre Keymap"
     ...
     END

     DEFINE CHANNELMAP
     ...
     END

     OPTIONS
     ...
     END

Vous pouvez voir que le mot `DEFINE` est utilisé pour spécifier quelle section est commencée (sauf pour `OPTIONS`), et `END` est placé à la fin de chaque section.

Vous pouvez placer des commentaires en débutant la ligne avec le caractère `#`.

S'il vous plaît, n'oubliez pas de m'envoyer vos fichiers map par courrier électronique, pour que les versions futures de KMid incluent le support d'un nombre plus important de claviers non compatibles General Midi.

## 4.3.1. La section `PATCHMAP`

Cette section est utilisée pour spécifier comment les sons vont être redirigés du standard GM vers les spécifications de votre clavier. Son utilisation est la suivante :

     (Nom du son GM)=(N) [AllKeysTo M]

où `N` est le numéro que votre clavier doit reçevoir pour utiliser le son équivalent au standard GM.

Notez que ce qui se trouve à gauche du signe égal est ignoré, donc on suppose que les sons GM sont dans l'ordre (de 0 à 127), et donc vous ne pouvez pas changer l'ordre des lignes ni omettre un des 128 instruments.

L'option `AllKeysTo M` est utilisée pour transformer toutes les notes qui utilisent cet instrument vers la touche `M`. Par exemple, supposons que votre clavier midi n'ait pas le son "gun shot" (son GM 127) et vous voulez le remplacer par un son de percussion (par exemple la touche 60), qui ressemble au son "gun shot", alors vous pouvez placer à la ligne 127 de votre section`PATCHMAP` :

     Gunshot       =100 AllKeysTo 60

Ainsi lorsqu'un fichier midi tente de jouer une note avec le son 127 (gun shot), il sera redirigé vers le son 100 (le kit de percussions de votre clavier) et jouera la note 60 (indépendamment de la touche qui a été initialement jouée).

Notez que lorsque j'utilise l'expression "son de percussion", je veux dire le son avec lequel chaque touche joue une percussion différente, comme par exemple, une cymbale, un tom, des maracas etc, et non pas un unique son de percussion disponible sur certains claviers, et dont la hauteur varie avec la touche qui a été frappée.

## 4.3.2. La section `KEYMAP`

La section `KEYMAP` est utilisée pour spécifier la façon dont les touches seront mappées (c'est-à-dire assignées à d'autres événements midi), dans un canal midi donné ou pour un instrument donné. Son utilisation est la suivante :

     DEFINE KEYMAP "Nom de la Keymap"
     C 0 =0
     C#0 =1
     D 0 =2
     ...
     END

Tout comme pour la section `PATCHMAP`, l'ordre des lignes est très important, et elles doivent toutes être présentes (les 128 touches).

Comme vous pouvez définir plusieurs keymaps pour différents canaux midi et instruments, vous devez donner un nom différent à chacune à la première ligne.

Les keymap sont utilisées principalement pour mapper les touches sur le canal de percussions. Jetez un coup d'oeil aux "maps" fournies avec le logiciel pour voir quelques exemples.

## 4.3.3. La section `CHANNELMAP`

Cette section peut être utilisée pour mapper des canaux midi vers d'autres canaux midi. Par exemple, si vous voulez échanger le premier et le deuxième canal, vous pouvez le faire facilement en écrivant la section `CHANNELMAP`.

Ceci est cependant plus utile pour les claviers qui utilisent le son de percussions sur un canal fixe (le standard GM utilise le canal 10, d'autres utilisent le canal 16 ou 9 encore).

Notez que les instruments midi utilisent 16 canaux midi, ainsi la section `CHANNELMAP` comporte 16 lignes, de 0 à 15, comme suit :

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

où `N` est le canal qui est redirigé vers le canal `M`. Si l'option `Keymap` est utilisée, la Keymap nommée `Name` sera utilisée sur ce canal (cette Keymap doit avoir été définie au préalable dans le fichier !). Si l'option `ForcePatch` est utilisée, tous les événements qui tenteront de changer le son utilisé sur ce canal seront ignorés, et le son `x` sera utilisé à la place.

L'option `ForcePatch` peut être utile par exemple pour toujours utiliser le kit de batterie sur le canal de canal de percussions.

## 4.3.4. La section `OPTIONS`

La section `OPTIONS` contient des options qui peuvent être très utiles :

     OPTIONS
     PitchBenderRatio = r
     MapExpressionToVolumeEvents
     END

Vous pouvez spécifier les deux options, une seule, ou aucune.

La valeur du `PitchBenderRatio r` contient le facteur par lequel les événements de pitch bend sont multipliés (NdT : le pitch bend est une variation de la hauteur du son, la plupart du temp contrôlée par un joystick ou une molette, situé(e) à gauche du clavier sur les synthétiseurs). Cela signifie que lorsqu'un fichier midi envoie un événement de pitch bend avec la valeur `n`, la valeur réelle qui sera envoyée est `n*(r/4096)` (la valeur `4096` est choisie de telle sorte qu'il n'y ait que des valeurs entières dans les fichiers map).

Ceci est utile car le standard GM spécifie que lorsqu'un clavier midi reçoit un événement de 'pitch bend' avec la valeur 4096, il doit faire varier la hauteur du son d'une note vers le haut, mais certains claviers tentent d'augmenter la hauteur du son de plusieurs notes (voire d'une octave !) lorsqu'ils reçoivent la valeur 4096. Ceci peut être facilement résolu en essayant différentes valeurs de telle sorte qu'au lieu d'envoyer la valeur 4096, KMid envoie la valeur appropriée.

Lorsque l'option `MapExpressionToVolumeEvents` est activée dans un fichier map, et si un fichier midi envoie un événement 'expression', KMid enverra un événement 'volume' qui est compris par un ensemble plus large de claviers non GM, et qui produit un effet similaire. Il y a beaucoup de fichiers midi qui utilisent les événements 'expression' pour diminuer progressivement le volume à la fin des morceaux, et si vous sentez que le volume de la musique devrait baisser de plus en plus, vous pouvez activer cette option et voir si c'est ce dont vous aviez besoin. Il est en effet possible que votre synthétiseur ignore les événements 'expression'.