# 4.3. Creando un mapa midi

No hay ningún programa para generar mapas midi con lo que tendrás que editar el fichero a mano (usando tu editor de textos favoritos) . Un hecho que quisiera hacer notar es que mapa es una traducción mala de `map`, pero en el fondo, tiene sentido y además se parece a la expresión inglesa `midi map` con lo que usaré `mapa midi` para referirme al fichero de configuración del mapeador midi.

Un mapa midi es un archivo de texto en el que se guardan todas las conversiones necesarias que se harán cuando se toque la música.

Consiste en varias secciones: `PATCHMAP`, `KEYMAP`, `CHANNELMAP`, `OPTIONS`.

Cada sección debe aparecer sólo una vez, excepto la sección `KEYMAP` que puede aparecer tantas veces como sea necesario, siempre que en cada aparición use un identificador distinto (continua leyendo para mas detalles)

La estructura general de un fichero map es :

     DEFINE PATCHMAP
     ...
     END

     DEFINE KEYMAP "Nombre de un Keymap"
     ...
     END

     DEFINE KEYMAP "Otro Keymap"
     ...
     END

     DEFINE CHANNELMAP
     ...
     END

     OPTIONS
     ...
     END

Puedes ver que la palabra `DEFINE` se usa para especificar que sección se va a empezar (excepto en `OPTIONS`), y que `END` se pone al final de cada sección.

Puedes poner comentarios comenzando la linea con un caracter `#` .

Por favor, no olvides mandarme tu fichero de configuración del mapeador midi para que así las versiones futuras de KMid incluyan soporte para más teclados que no sean General Midi.

## 4.3.1. La sección `PATCHMAP`

Esta sección se usa para especificar como se van a traducir los instrumentos, de GM a los requerimientos de tu teclado . El uso general es :

     (Nombre del instrumento GM)=(N) [AllKeysTo M]

Donde `N` es el número que tu teclado necesita recibir para cambiar al mismo instrumento al que cambia el estandar GM.

Por favor observa que la parte izquierda del signo igual es ignorada, asi que los instrumentos GM se suponen que van en orden (de 0 a 127), y no está permitido el cambiar el orden de las lineas, ni omitir ninguno de los 128 instrumentos.

La opción `AllKeysTo M` se usa para mapear todas las notas que usen ese instrumento a la tecla `M`. Por ejemplo, supongamos que tu teclado midi no tiene un sonido de 'Gun Shot' (sonido de disparo de pistola), que es el instrumento 127 según el estandar GM, asi que quieres mapearlo a un tambor de percusión (por ejemplo, la tecla 60), que suena similar a un disparo, entonces puedes poner esto en la linea 127 de la sección `PATCHMAP` :

     Gunshot       =100 AllKeysTo 60

Asi cuando un fichero midi intente tocar una nota con el instrumento 127, será mapeado al instrumento 100 (suponiendo que ese sea el numero usado en tu teclado para el `instrumento de percusión`) y tocará la nota 60 (independientemente de la tecla que fuera a ser tocada).

Nótese que cuando uso la expresión 'instrumento de percusión', me refiero al instrumento en el que cada tecla toca un tambor, platillo o caja de percusión distinto, y no a un posible sonido que algunos teclados tienen y que tocan un tono distinto del mismo instrumento de percusión con cada tecla.

## 4.3.2. La sección `KEYMAP`

La sección `KEYMAP` se usa para especificar como se van a mapear las teclas, dentro de un canal o instrumento dado . El uso es :

     DEFINE KEYMAP "Nombre del Keymap"
     C 0 =0
     C#0 =1
     D 0 =2
     ...
     END

Igual que con la sección `PATCHMAP`, es muy importante el orden de las lineas y que estén todas las 128 teclas.

Como puedes definir varios 'keymaps' para diferentes canales e instrumentos, debes darle un nombre distinto a cada uno en la primera linea.

Los mapas de teclas (Keymaps) se usan principalmente para mapear las teclas en el canal de percusión . Hecha un vistazo a los mapas midi distribuidos para ver algunos ejemplos.

## 4.3.3. La sección `CHANNELMAP`

Esta sección se usa para intercambiar unos canales por otros . Por ejemplo, si tu quieres cambiar el primer y el segundo canal, lo puedes hacer muy facilmente en esta sección.

De todas formas, es todavía mas útil, para los teclados que necesitan que el canal de percusión esté en un determinado canal (el estandar GM usa el canal 10, otros usan el 16 y otros el 9).

Nótese que los dispositivos midi usan 16 canales, así que la sección `CHANNELMAP` tiene 16 lineas (de 0 a 15), como esta :

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

Donde `N` es el canal que va a ser mapeado al canal `M` . Si se usa la opción `Keymap`, el mapa de teclas con nombre `Nombre` será usado en este canal (la sección Keymap debe haber sido definida antes en ese fichero !) . Si se usa la opción `ForcePatch`, todos los eventos que intenten cambiar el instrumento que se usa en ese canal serán ignorados, y el instrumento `x` será usado en su lugar.

La opción `ForcePatch` es muy útil por ejemplo, para usar siempre el instrumento de percusión en el canal de percusión.

## 4.3.4. La sección `OPTIONS`

La sección `OPTIONS` tiene algunas opciones generales que pueden ser muy utiles :

     OPTIONS
     PitchBenderRatio = r
     MapExpressionToVolumeEvents
     END

Puedes especificar ambas opciones, sólo una, o ninguna.

El valor de `r` en `PitchBenderRatio` , especifica la proporción por la que serán multiplicados los eventos de inflexión del tono (Pitch bender) . O sea, cuando un fichero midi intenta mandar un evento de inflexión del tono con un valor de `n`, el valor que realmente será mandado será `n*(r/4096)` (el `4096` es para no tener que usar puntos decimales en el fichero map) .

Esta opción se usa porque el estandar GM dice que cuando un dispositivo midi recibe un evento de inflexión del tono con un valor de 4096, debe subir el tono a uno mas agudo, pero algunos teclados intentan subir el tono a dos o mas notas mas agudas ( incluso una octava mas aguda ! ) cuando reciben un 4096 . Esto se arregla facilmente intentando distintos valores para que en vez de mandar un 4096, KMid mande el valor apropiado.

Cuando se especifica la opción `MapExpressionToVolumeEvents` en el fichero map, y un fichero midi intenta mandar un evento de expresión, KMid mandará un evento de volumen que comprenden todos los teclados que no son GM, y que tiene un efecto muy parecido. Hay muchos ficheros midi que usan eventos de expresión para ir bajando el volumen al final de la canción, asi que si tu crees que la música debería ir escuchandose cada vez mas baja, puedes activar esta opción y ver si es lo que necesitas, porque posiblemente tu sintetizador midi, esté ignorando los eventos de expresión porque no los comprenda .