Sunteți pe pagina 1din 40

El protocolo MIDI

El MIDI es un gran desconocido para muchos usuarios; aqu trataremos de explicar qu


es el protocolo MIDI y cuales son sus aplicaciones prcticas y creativas.
Nociones bsicas: el lenguaje MIDI
MIDI (Musical Instruments Digital Interface) es el lenguaje que utilizan actualmente
muchos instrumentos para comunicarse entre ellos, enviar y recibir datos y
sincronizarse. Naci dentro del mundo de los sintetizadores como respuesta a una
necesidad de los msicos: controlar varios equipos con sus dos manos y hacer capas de
varios sonidos entre ellos. Los primeros resultados de esta nueva tecnologa se
mostraron en el North American Music Manufacturers Show de 1983 en Los ngeles. La
demostracin consisti en dos sintetizadores de distintos fabricantes conectados por
MIDI con un par de cables; el representante de una de esas dos compaas toc uno de
los sintetizadores... y el pblico se alborot entre muecas de asombro al ver como los
teclados sonaban juntos!
Al igual que dos ordenadores pueden conectarse por mdem, dos instrumentos que
soporten el protocolo MIDI pueden comunicarse. La informacin MIDI tiene un carcter
netamente musical: se refiere a comandos play-stop, activacin de nota, tempo,
volumen, etc, aunque su uso avanzado permite muchas mas posibilidades.
En este punto vale la pena hacer una aclaracin para los ms novatos. Uno de los mitos
ms recurrentes entre los no iniciados es que el MIDI es algo material, un formato de
sonido en s mismo. Eso ha llevado a las tpicas y errneas expresiones "escucha este
MIDI que acabo de hacer", "estoy buscando el MIDI de esta cancin", y el ms inocente
de todos ellos, "quiero pasar este WAV a MIDI". Todos estos conceptos se basan en una
mala comprensin del MIDI. El MIDI es un protocolo de comunicacin, un conjunto de
comandos que circulan entre dispositivos MIDI dando rdenes a los mismos respecto a lo
que deben hacer. Lo que suena son los aparatos, no "el MIDI" que, adems, tiene otras
funciones aparte de controlar la ejecucin de sonidos. Cuando alguien pregunta "cmo
pasar de WAV a MIDI", est en la misma situacin que aquel que tiene una foto digital
(un JPG por ejemplo) de un texto y quiere que esa foto se convierta en formato TXT para
usarlo en un procesador de textos. As como el WAV y el JPG son "fotos" digitales de una
realidad material (el sonido y la imagen), el MIDI y el TXT son lenguajes que indican a
ciertos dispositivos qu deben hacer. En el caso de un sintetizador, el MIDI le dice qu
notas deben sonar, a qu volmenes, etc; y en el caso de un procesador de textos, el
TXT le dice qu caracteres deben presentarse, en qu formato... Es cierto que existen las
tecnologas OCR para leer caracteres a partir de una foto, pero esta tcnica est
implementada en el audio digital con menos fortuna. Existen programas que pueden
identificar tonos a partir de un wav y construir mensajes MIDI a partir de ellos, pero
normalmente solo funciona con WAVs monofnicos y no muy complejos.
Volviendo al tema que nos ocupa, conviene hablar un poco del funcionamiento interno
de este lenguaje para entender cmo se comporta. La base de la comunicacin MIDI es
el byte (una unidad de informacin digital). Cada comando MIDI tiene una secuencia de
bytes especfica. El primer byte es el byte de estado (status byte), que le dice al
dispositivo MIDI qu funcin activar. Codificado en ese byte de estado va el canal MIDI.
El MIDI opera en 16 canales diferentes, numerados del 0 al 15. Las unidades MIDI
aceptarn o ignorarn un byte de estado dependiendo de en qu canal estn
configuradas para recibir datos. Slo este byte de estado tiene codificado el nmero de
canal, ya que los dems bytes de la cadena se asume que circulan en el canal indicado
por el byte de estado.

Algunas de las funciones que puede activar el byte de estado son estas: Note On, Note
Off, System Exclusive (SysEx), Patch Change, y otras. As pues, dependiendo del byte de
estado, le seguirn un numero diferente de bytes. Por ejemplo, el estado Note On le dice
al dispositivo MIDI que empiece a hacer sonar una nota. As pues, se requerirn dos
bytes adicionales al de estado; uno que indique el tono de la nota (pitch byte) y otro que
marque la velocidad de la misma (velocity byte). Este ltimo byte de velocidad es el que
determina con que fuerza ha sido pulsada esa nota. Aunque no todos los dispositivos
MIDI aceptan el byte de velocidad -especialmente los aparatos antiguos o algunos
modernos de gama baja-, sigue siendo un byte requerido para completar la cadena.
Y para qu citamos aqu todo este farragoso sistema de datos? Es importante hacer
notar ahora una limitacin del lenguaje MIDI, y es su transmisin en serie. Por un cable
MIDI discurren todos esos bytes que hemos citado... pero uno detrs de otro, no todos a
la vez. Esto tiene implicaciones prcticas: por ejemplo, si tenemos un teclado
controlador conectado a un sampler y estamos enviando datos MIDI al sampler desde el
teclado, al pulsar un acorde de varias notas no llegarn todas juntas al sampler, sino una
detrs de otra. El proceso se hace a gran velocidad y no hay retardos audibles en este
ejemplo, pero en una cadena interconectada de dispositivos MIDI s podran surgir
problemas, como indicaremos a continuacin. Por todo esto, es importante tener una
idea de lo que realmente transmiten los datos MIDI: qu bytes y en qu orden.
Conexiones y cadenas MIDI
Seguramente ya ests familiarizado con esas conexiones de 5 pines de tus teclados o
aparatos MIDI, etiquetadas como IN, OUT y THRU. Alrededor de estos tres conectores
girar
todo
nuestro
sistema
MIDI.

Por los puertos MIDI IN de un aparato se recibirn todos los


mensajes MIDI y por el MIDI OUT cada aparato enviar los suyos. La conexin MIDI THRU
es algo que desconcierta a los ms novatos, pero no tiene ningn misterio y es de gran
utilidad para configurar una cadena. Lo que hace el MIDI THRU es copiar los datos que se
reciben por el MIDI IN de ese aparato y enviarlos de nuevo hacia fuera. Aunque del MIDI
THRU salgan datos MIDI, no debe confundirse con el MIDI OUT; de este ltimo salen
solamente los datos enviados por el mismo aparato, mientras que del THRU sale la copia
de
los
datos
recibidos
por
el
aparato
en
su
MIDI
IN.
Cul es la utilidad de este MIDI THRU? Bsicamente, enlazar unos aparatos con otros en
una cadena, de manera que todos respondan a una fuente de datos MIDI inicial. Como
ejemplo prctico, si tenemos un secuenciador MIDI del que nacen todos nuestros
mensajes de control y queremos enviarlos a 2 aparatos distintos, tendramos que
establecer la siguiente cadena:

En nuestro esquema, el secuenciador enva sus datos MIDI por la salida MIDI OUT (A);
estos datos son recibidos por el sintetizador a traves de su MIDI IN (B), y reenviados por
el MIDI THRU (C) hacia el sampler, que los recibe, lgicamente, por su MIDI IN (D). As
pues, los datos del secuenciador estaran siendo recibidos por los dos aparatos, ya que
el primero (sintetizador) los recibe directamente por su MIDI IN, y al mismo tiempo los

copia

los

reenva

por

su

MIDI

THRU

hacia

el

sampler.

Como ya habrs imaginado, podramos seguir conectando dispositivos MIDI en esta


cadena, simplemente enlazndolos con el MIDI THRU. Por ejemplo si queremos aadir
otro sintetizador, podramos enviar el MIDI THRU del sampler hacia su MIDI IN. De todos
modos, por la cuestin antes mencionada de que el MIDI se transmite en serie, no
conviene enlazar una cadena demasiado larga por MIDI THRU, ya que el ltimo aparato
de esta cadena podra sufrir retardos al recibir los mensajes. Por esta razn, muchos
secuenciadores tienen varias salidas MIDI, para poder enviar los mismos datos en
distintas series a diferentes aparatos sin utilizar las conexiones THRU, o al menos
reducindolas. Por ejemplo, si nuestro secuenciador tuviese dos MIDI OUT, el esquema
anterior no necesitara el uso de la cadena THRU: simplemente conectariamos el
sintetizador y el sampler a cada una de esas dos salidas, y ambos recibiran los datos del
secuenciador al mismo tiempo.
Mensajes MIDI: teora
Ya sabemos que gracias al MIDI podemos controlar varios equipos, establecer relaciones
entre ellos y sincronizarlos. Imaginando que nuestros aparatos MIDI son los
componentes de una tropa de soldados, y nosotros los capitanes, lo ms importante
ahora ser conocer qu ordenes podemos enviar para que cumplan su misin. Al igual
que una tropa obediente, nuestro equipo de dispositivos MIDI funcionar correctamente
si
sabemos
qu
mensajes
enviarles
y
si
estos
son
correctos.
De esta manera, nos encontramos con las siguientes categoras de mensajes que
podemos enviar:
Mensajes de canal
Se llaman as porque actan solamente en el canal que se determine. Son de dos tipos:
Mensajes de voz: Se basan en la interpretacin; por ejemplo: Note on (activacin de
una nota), Note off (desactivacin), Program Change (cambio de timbre) o Control
Change (cambio de controlador, tambin llamado CC; estos se enumeran de 0 a 127, y
algunos estn determinados como estndar, p.e: el CC 7 es el control de volumen y el
CC
10
es
el
pan)
Mensajes de modo: Indican a un sintetizador como debe distribuir las voces internas;
bsicamente son estos: Omni on/off (si se reciben mensajes por todos los canales -on- o
solo por uno predeterminado -off-) y Mono on/off (indica si cada canal tocar solo una
nota -on-, o ser polifnico -off-)
Mensajes de sistema
No afectan solo a un canal, sino a

todo el sistema, y son de tres tipos:

Mensajes comunes: por ejemplo, los de afinacin general de un sintetizador.


Mensajes de tiempo real: pensados para secuenciadores (start-stop, mensajes de reloj,
etc)
Mensajes SysEx: su nombre deriva de "sistema exclusivo". Sirven para que diferentes
dispositivos de la misma marca y modelo intercambien informacin (por ejemplo, acerca
de sonidos, sntesis, efectos, etc.). Cada dispositivo MIDI suele traer funciones propias,
no generales a todos los dems dispositivos, y por ello son necesarios estos mensajes,
que son "exclusivos" de esa marca y modelo.

Mensajes MIDI: prctica


Todo esto est muy bien, pero lo necesito para mi trabajo prctico? Descartando los
tipos de mensajes ms elementales y de menor importancia (por ejemplo, no hace falta
pararse demasiado sobre los evidentes usos del Note on-off o la afinacin), la respuesta
es s: por eso nos centraremos ahora en aquellos que es necesario dominar para
controlar
nuestros
equipos
con
precisin.

Cambio de banco y programa: Tenemos un sintetizador o


sampler repleto de sonidos interesantes, pero cmo acceder a ellos desde el exterior,
p.e. desde un secuenciador u otro teclado? La respuesta nos la dan estos dos mensajes:
Bank Change y Patch Change. Son los que indicarn al dispositivo MIDI qu timbre debe
sonar por cada canal (recordemos que son mensajes de canal y slo afectarn al canal
que
determinemos).
-Patch Change: Como en el resto del protocolo MIDI, disponemos de la numeracin 0 a
127 para escoger cualquier sonido de una fuente externa. Si tuvieramos un sintetizador
con 32 memorias para patches (por ejemplo, el clsico Yamaha DX7), para escuchar el
sonido nmero 20 mandaramos un mensaje Patch Change 19 (no el 20, porque el 0 ya
cuenta como primer nmero). Pero claro, esto nos limitara a escoger 128 sonidos,
cuandos los aparatos actuales pueden contener muchos ms. Es por ello que estos
aparatos ordenan sus sonidos en distintas series de 128 sonidos, llamadas "bancos". As
pues, un sintetizador con 512 patches tendra que dividirlos en 4 bancos de 128.
-Bank Change: Este es el mensaje que nos da definitivamente un acceso total a los
patches de un dispositivo con mas de 128 sonidos. Siguiendo con nuestro ejemplo de un
sintetizador que tenga 512 sonidos, organizados en 4 bancos: si quisiramos seleccionar
el sonido 138, o para entendernos mejor, el dcimo sonido del segundo banco,
tendramos que mandar un mensaje de Bank Change 1 y a continuacin, un Patch
Change 9. Date cuenta de que sta es una explicacin simplificada; la mayoria de los
sintetizadores tienen nmeros especficos para designar sus bancos; por ejemplo, el
banco A de un sinte podra requerir un Bank Change 64 u otro, no tendra por qu ser el
0. Lo hemos explicado as para hacerlo de una manera ms grfica. Para saber qu
mensajes de banco debes enviar a tu sinte, consulta en su manual.
Controladores: los mensajes CC (Control Change) nos dan acceso a un montn de
funciones importantes que afectan a cada canal. Podemos mandar -lo adivinaste- 128
mensajes CC distintos, y a cada uno asignarle un valor. Por ejemplo, un mensaje CC 7
(volumen) con valor 120 subir el volumen de ese canal a 120. Un mensaje CC 10 (pan)
con valor 80, colocar la panoramizacin de ese canal ligeramente a la derecha, dado
que 64 se considera el centro. Algunos CC han sido estandarizados, y tienen la misma
funcin en cualquier dispositivo MIDI que te encuentres. El resto no tienen ninguna
funcin asignada en principio, de modo que cada fabricante puede drsela a su gusto.
Para saber a qu mensajes CC responde tu dispositivo, tendrs que consultar su tabla de
implementacin MIDI. Por lo pronto, nosotros te ofrecemos aqui nuestra tabla de
mensajes
de
control
MIDI.
SysEx: Dado que estos mensajes dependen de cada fabricante, no vamos a citar
ninguno en concreto aqu porque, por ejemplo, un mensaje SysEx que variase la
profundidad del efecto "chorus" en un Roland no valdra para un Yamaha. Pero s los

destacamos porque son los que permiten acceder a las "tripas" de tus dispositivos. Los
SysEx asustan a todo el mundo, y realmente tienen cierta complejidad, pero si se
dominan abren un mundo nuevo de control total sobre tus mquinas. Aqu te animamos
a curiosear e investigar acerca de los SysEx, pero no es el objeto de este artculo
profundizar sobre ellos.
Equipo MIDI bsico

Sin duda, los dispositivos MIDI ms tradicionales son los sintetizadores. El


MIDI se dise para comunicarlos entre s, y esa funcin desde luego sigue vigente. El
MIDI te permite utilizar varios teclados o mdulos de sonido a la vez; de esta manera
puedes hacer que un sonido de un sinte sea reforzado por el sonido de otro, o
simplemente hacer arreglos polifnicos y multitmbricos con varias mquinas
sincronizadas.
Hay que aclarar aqu la tpica confusin de principiante entre sintetizador y teclado. El
sintetizador (o sampler, dado el caso) es el generador de sonido, y el teclado
simplemente enva mensajes MIDI indicando qu notas deben tocarse y con qu fuerza.
Como la mayora de sintetizadores llevan teclado incluido, mucha gente cree que son
inseparables. Pero no es as; hay sintetizadores sin teclado (los llamados "mdulos de
sonido") y teclados sin sintetizador. Estos ltimos son los teclados maestros.
Con la simplificacin de los estudios caseros actuales, mucha gente utiliza los llamados
teclados maestros o controladores, que no incorporan ningn sonido. Simplemente
envan datos MIDI para controlar a otros aparatos (por ejemplo, sintes virtuales). Esto
abarata su precio y hace que la produccin musical sea ms accesible a todos, si bien
los teclados maestros de gama alta pueden ser muy caros. Algunos fabricantes famosos
son FATAR (su modelo SL-161 en la foto de abajo), Oberheim, Midiman, Roland o Yamaha.

Domina tu equipo externo

El centro de una instalacin MIDI es el secuenciador, que


centraliza la grabacin y reproduccin de todos los mensajes MIDI, su edicin y
sincronizacin. Lo normal es que est basado en un programa de ordenador, dado que
los ordenadores ofrecen mayor potencia que cualquier sistema de secuenciacin

hardware, y muestran sus datos en monitores de gran tamao que facilitan las tareas.
Sin embargo, para actuar en directo muchos prefieren la seguridad de los
secuenciadores hardware; algunos ejemplos clsicos de estos aparatos son el Alesis
MMT-8 (foto izquierda) o el Roland MC-50. Tambin se utilizan los viejos ordenadores
Atari
y
Amiga
para
este
fin.
Los secuenciadores software ms famosos son sin duda Logic (foto abajo), Cubase y
Cakewalk (o su reciente actualizacin, SONAR). Cakewalk es el ms extendido en
Amrica, y los otros dos son lderes en el mercado europeo. Cualquiera de ellos es
altamente capaz, destacando especialmente Logic por su environment configurable.
Otros programas famosos son el Digital Performer de MOTU o la saga Orchestrator de
Voyetra; ciertos editores de partituras como Finale tienen funcionalidades de
secuenciador MIDI, as como algunos sistemas multipista de audio como Pro Tools o
Nuendo. Todos ellos manejan un gran nmero de pistas a la vez, as que esto no ser un
lmite.

Si dispones de varias mquinas MIDI y quieres tener un control absoluto sobre ellas, todo
debe estar bien conectado y debe gestionarse principalmente desde el secuenciador.
Desde este programa podrs grabar todos tus equipos por pistas, y luego cortar, copiar
y editar las secuencias. T solo podrs completar un arreglo complejo de muchas pistas.
Lo normal es comenzar grabando una pista base, y luego ir grabando las dems por
encima, mientras suenan las anteriores que has grabado. As el tema se ir
"construyendo"
y
solo
se
requiere
la
intervencin
de
una
persona.
Una primera idea para conectar varios equipos entre ellos es la cadena THRU, ya
explicada en la primera parte de este tutorial. Sin embargo, si tienes muchos equipos, se

producir latencia en los ltimos dispositivos de la cadena.


La
solucin a esto es utilizar un interface MIDI dotado de varios puertos de salida y no de
uno slo. Esto evita las cadenas THRU, o al menos las minimiza: si tu interface MIDI tiene
cuatro salidas, puedes dominar cuatro dispositivos directamente, y todos los mensajes
les llegarn a un mismo tiempo. Como hemos dicho, el protocolo MIDI funciona de una
manera serial, pero esto es as por cada puerto; es decir, si disponemos de varios
puertos, actuarn de manera separada, sin acumular sus datos unos a otros. Existen
muchos interfaces de este tipo en el mercado; algunas marcas fabricantes son Midiman
(a la izquierda, su Midisport 2x2), Egosys, MOTU, Steinberg y Emagic. Todas ellas ofrecen
diversos modelos dependiendo de sus salidas y entradas MIDI. Tambin algunas tarjetas

de sonido incorporan dos o ms puertos MIDI de entrada y salida, pero es raro y lo


normal
es
que
solo
lleven
uno
o
ninguno.
Para gestionar las libreras de sonidos de tus sintetizadores y editar sus patches va MIDI
existen tambin soluciones software muy tiles, que evitarn en muchas ocasiones el
enfrentamiento con esos pequeos displays de tus mquinas. Cuntos se han atrevido
a editar los sonidos un DX7 desde el frontal de la mquina? Utilizando estos programas
podrs hacer esas tareas de manera remota, aprovechndote de la capacidad de
almacenamiento y organizacin de tu ordenador y una mayor claridad y comodidad
gracias a la pantalla grande. Sound Diver de Emagic y SoundQuest son dos ejemplos de
gestores-editores totales, que incluyen plantillas para un amplio nmero de aparatos,
pero hay tambin una multitud de editores ms sencillos, que slo se ocupan de una
mquina concreta. La mayora de estos ltimos son gratuitos; busca por la red el que
corresponda a tu sintetizador.
Domina tu equipo virtual

Con la implantacin cada vez mayor de los sintetizadores y


samplers virtuales, muchos usuarios han empezado a demandar un control ms manual
sobre ellos. El ratn no parece convencer a la hora de controlar con precisin estos
programas, y es por ello que los fabricantes han dado una alternativa: los controladores
MIDI externos. Estos dispositivos adoptan la forma de mesas o consolas con faders o
knobs configurables, y se limitan a enviar datos MIDI como CCs o sysex, que controlan
las funciones del software. As como para tocar un sintetizador virtual necesitars un
teclado maestro que le enve mensajes MIDI, para controlarlo como si fuera hardware,
con botones, deslizadores y dems, necesitars una de estas mquinas. Su principal
ventaja es que no se limitan a un solo sintetizador virtual; al utilizar el protocolo
universal MIDI, pueden dominar cualquier dispositivo software que siga estas
especificaciones. Esto incluye, por supuesto, a las mquinas hardware que admitan su
control
a
partir
de
mensajes
CC
o
sysex
externos.
La oferta de controladores va en aumento, y desde el ya clsico Keyfax Phatboy (foto
izquierda) han aparecido muchos otros, como el Doepfer Pocket, Native Instruments
4Control, Phillip Rees C16 o ya a un nivel ms ambicioso, el Kenton Control Freak,
Peavey 1600 o Doepfer Drehbank.
Flautas, guitarras... y otras rarezas MIDI

Se han fabricado toda una diversidad de aparatos MIDI muy "especiales", sobre
todo en lo referente a controladores. El hecho de que el MIDI sea un protocolo estndar,
universal, hace que cualquier dispositivo compatible pueda integrarse en la cadena, y
las
posibilidades
son
mltiples.
Por ejemplo, Yamaha ofrece su controlador de viento WX5 (a la izquierda), que es una
especie de saxofn-flauta que enva datos MIDI basndose en el soplido. Hay mdulos de
sonido especiales para este controlador, como el Yamaha VL-70m, que imita los timbres
de viento reales mediante modelado fsico. Pero como el WX5 es MIDI, puede controlar
cualquier cosa... podras tocar un violn o unas marimbas usando este curioso aparato.
Los guitarreros tambin tienen sus propios dispositivos MIDI. Acoplando una pastilla MIDI
a tu guitarra puedes convertir su seal en datos MIDI que podrn controlar un
sintetizador de guitarra (como el Roland GR-30 o 50)... o lo que t quieras.
El mundo de los controladores MIDI se ha ido convirtiendo en toda una caja de
sorpresas, y cada vez nos topamos con mquinas msa innovadoras y originales. Si te
gustaron las arpas lser de Jarre, Roland te ofrece sus sistemas D-Beam en muchos de
sus teclados y sintetizadores; se trata de un rayo que, al ser interrumpido a diferentes
alturas y ngulos, genera diferentes mensajes MIDI que modifican el sonido.

Tutorial midi desde 0. Esquema


Hola. Les quiero mostrar lo que esta haciendo un taringuero tec_claudio_perez que
empezo a trabajar con el esquematico del prototipo y un tutorial de "Midi desde 0" para
entender
los
mensajes
midi.
Bueno esto fue lo que hizo hasta ahora (un trabajo muy bueno)
Diagrama
Este
es

esquemtico
el
diagrama

del
prototipo
esquemtico
del

y
tutorial
MIDI
prototipo
version
0.1

Aqui

en

version

.pdf

http://rapidshare.com/files/436917031/Mi_primer_bateria_sch_ver_0.1.pdf
Los conectores J3, J4 y J5 son las entradas analogicas para los piezo, J8 es para el LCD de
16x2, J1 es la salida MIDI, J9 la salida serial RS-232. J6, J7 y J10 los usaria luego para
agregar
los
botones.
Originalmente vi el proyecto de www.edrum.info y lo queria armar igual, pero por alguna
razn no me funcion, ni siquiera encendia el LCD, era como que no lo inicializaba
correctamente. Buscando en el sitio no encontr el codigo fuente, solo la versin
compilada .HEX (Luego me di cuenta que nunca liber el codigo fuente). Un poco
frustrado decidi probar solamente el LCD, como suelo programar usando el compilador
en C de CCS PCWHD, este ya trae una libreria "lcd.c", que es muy fcil de usar, pero
utiliza el LCD en 4 bits y no en 8 bits como el que ya tenia, esto por lejos me parecio una
ventaja ya que me libera cuatro pines del micro que se pueden usar para poner mas
pulsadores. Ademas esta libreria utiliza el puerto D, en ves del puerto B, asi que cambi
los pines del LCD compil un programa de prueba y comprob que el LCD funcionaba
correctamente.

Por otro lado luego tuve problemas con la parte analgica de los sensores, la placa con
los operacionales LM324, aunque cuando la habia armado en el protoboard parecia
funcionar bien. Finalmente luego de buscar en algunos sitios encontr este proyecto
basado
en
Arduino
http://todbot.com/blog/2006/10/29/spooky-arduino-projects-4-and-musical-arduino/
Aqui se ve que conectan directamente el piezo en paralelo con una resistencia de 1M a
la entrada analogica. El zener de 5,1 V tiene la funcin de limitar el voltaje generado por
el golpe sobre el piezo, pero los pic ya tienen internamente en cada pata un par de
diodos de proteccin. Esta figura est sacada de la hoja de datos del PIC16F877

Asi que con esto en mente prob lo mismo sobre el PIC y funcion. Realic algunas
pruebas con el convertidor AD y enviaba el valor por el puerto serial a la PC. Ahora lo
que
faltaba
era
hacer
que
suene
por
MIDI.
MIDI

desde

0...

Esta seccin explica paso a paso como son los mensajes midi para saber que es lo que el
PIC debe enviar a la PC, si ya conocen el protocolo MIDI se la pueden saltear.
El protocolo MIDI tiene dos partes, una parte lgica que involucra que un instrumento

musical envia mensajes para indicarle a la PC que se presion o se solt una nota, y otra
parte fsica o hardware donde se definen como seria la comunicacin serial de forma
ptica para recibir estos mensajes, primero vamos a ver la parte de los mensajes.
Para saber como funciona el protocolo midi, normalmente se conecta un instrumento
musical con salida MIDI, como un teclado o un organo, a la pc usando una interfase MIDIUSB.

Algunos teclados o controladores MIDI nuevos ya vienen con puerto USB, por ejemplo
tengo
un
controlador
M-Audio
Keystation
49es.

En esta foto se ve que tiene los dos conectores, el tipo DIN 5 MIDI OUT y adems un
conector
USB
tipo
B
similar
al
de
las
impresoras.

Luego se presiona una tecla en el instrumento, digamos un do de la primer octava (C1) y


se
monitorea
la
informacin
que
recibe
la
PC.
Sin embargo, si no tienen ningun instrumento MIDI, ni tampoco ninguna interfase MIDIUSB, y todavia quieren saber como funciona el protocolo MIDI se puede realizar haciendo
lo siguiente, primero se instala un puerto midi virtual. Para esto utilizo el "MIDI YOKE"
que
lo
pueden
bajar
de
aqu
http://www.midiox.com/zip/MidiYokeSetup.msi
Una vez instalado tambien se crea un nuevo icono en el panel de control

Por defecto instala 8 puertos midi virtuales llamados "MIDI Yoke:1" al "MIDI Yoke:8"

Ahora hay que instalar un programa que permite enviar notas MIDI usando el teclado de
la pc, existen varios, pero el que uso se llama "Bome's Mouse Keyboard", lo pueden
bajar
de
ac
http://www.bome.com/bome/downloads/MouseKeyboard200.exe
Es una versin shareware o postcardware, por lo que al iniciar aparece una nag screen
tipo recordatorio de compra con una demora de 20 segundos, pero si lo registran
desaparece, fuera de eso es completamente funcional. Ahora deberian configurarlo para
usar como salida MIDI OUT del programa el primer puerto midi virtual "MIDI Yoke: 1".
Esto lo hacemos para poder escuchar y ver los datos al mismo tiempo.

Para poder escuchar algun sonido deberiamos conectar la salida del puerto "MIDI Yoke:
1" al MIDI mapper del windows, para esto vamos a usar otra utilidad llamada Hubi's
loopback que sirve para conectar puertos MIDIs por software. Lo bajan de aca
No tiene ningun instalador, solo hay que ejecutar el archivo "HWMDCABL.EXE" y veran
que en la barra de tareas les sale una nueva aplicacin "Hubi's MIDI cable" que no
despliega ninguna ventana, pero si hacen click derecho sobre la misma aparecen las
opciones

Aqui deberian seleccionar como salida en la tercer columna donde dice "0-No Output" el
Mapeador Microsoft MIDI, al seleccionar algo se cierra la ventana, por lo que deberian
hacer click derecho nuevamente y en la segunda columna donde dice "0-No Input"
deberian
seleccionar
"MIDI
Yoke:1",
con
esto
deberia
quedar
asi

Resumiendo, lo que hicimos fue conectar el puerto "MIDI YOKE: 1" al Mapeador Windows
MIDI para poder escuchar las notas, este usa por defecto el sintetizador FM de la placa
de audio que tiene un psimo sonido, en mi caso si se fijan la ultima opcin en la
columna de salida dice "Sintetizador por Software de tabla de ondas XG", este es una
mejora sobre el midi mapper. Sin embargo luego aprenderemos como mejorarlo cuando
veamos los instrumentos VSTi de Steinberg. Por el momento seguiremos con esos
soniditos.
Aqui vamos a hacer una aclaracin, nunca elijan el mismo puerto virtual como entrada y
como salida, porque se produce una situacin de retroalimentacin de datos que causa
una insuficiencia de buffer y el MIDI Yoke deshabilita el puerto con el siguiente cartel de
advertencia (Por ejemplo le puse de entrada "MIDI Yoke: 1" y de salida el mismo puerto)

Volvemos al "Bome's Mouse Keyboard" y si est todo bien al presionar las teclas "Z X C V
B N M" deberian sonar las teclas blancas de la primer octava, las negras serian "A S D F
G H", las blancas de la siguiente octava serian "Q W E R T Y" y sus negras "1 2 3 4 5 6
7", con F3 y F4 se suben o bajan las octavas. Por defecto deberia sonar el primer patch o
instrumento que seria un piano, ahora bien, en MIDI existen 16 canales, en teoria se usa
un canal por instrumento. El canal 10 siempre se lo reserva para las percusiones, para
cambiar
de
canal
lo
eligen
donde
dice
channel.

Si ahora presionan "Z X C V" deberia sonar un KICK, un SNARE y todos los otros
instrumentos de una bateria. Por supuesto que no suena muy lindo, pero la idea por el
momento es ver que mensajes midi se envian para hacer sonar un KICK o un SNARE.
Luego veremos como mejorar el sonido cuando lleguemos al Addictive Drums en la
seccion sobre los VSTi. Ahora solo falta ver que mensajes midi se estan enviando.
Si ahora presionan "Z X C V" deberia sonar un KICK, un SNARE y todos los otros
instrumentos de una bateria. Por supuesto que no suena muy lindo, pero la idea por el
momento es ver que mensajes midi se envian para hacer sonar un KICK o un SNARE.
Luego veremos como mejorar el sonido cuando lleguemos al Addictive Drums en la
seccion sobre los VSTi. Ahora solo falta ver que mensajes midi se estan enviando.

Monitor

de

mensajes

MIDI:

MIDI-OX

Para poder monitorizar los datos que llegan por un puerto Midi utilizo el Midi-OX, lo
pueden
bajar
de
aqu
http://www.midiox.com/zip/midioxse.exe
Luego de instalarlo lo ejecutan y deben configurar el puerto MIDI de entrada, en
"Options"
->
"MIDI
Devices..."

Aqui se abre otra ventana donde se puede seleccionar los puertos midi de entrada y
salida (se puede por ejemplo recibir notas por un puerto procesarlas de alguna manera y
enviarlas
por
otro).

BUENO el post sigue, pero hasta aca lo pongo, si a alguien le interesa mandenme un
mensaje privado y les comento. El usuario es tec_claudio_perez

Index

1. Concepto General
2. Puertos de comunicacion y configuraciones
3. Canal MIDI.
4. Voz MIDI
5. Programa MIDI
6. Mensajes basicos
7. Ampliando informacion sobre MIDI

1. Concepto General
MIDI es un protocolo de comunicacion entre intrumentos musicales. Se creo en los 70 y ya hace tiempo que
esta consolidado como la interficie entre instrumentos por excelencia.
Mediante el MIDI, los instrumentos se envian mensajes que contienen las acciones que el musico hace sobre
ellos. Por ejemplo, si un teclista aprieta una tecla, por MIDI se recibe que se ha apretado dicha tecla y, cuando
la suelta, tambien de envia el correspondiente mensaje.
Asi pues, lo que se envia por MIDI no es el sonido que producen los instrumentos, sino las aciones o eventos
que se producen en el.
Esto permetiria, por ejemplo, almacenar una interpretacion para su posterior edicion y reproduccion... MIDI
tambien ofrece mecanismos para sincronizar y secuenciar los instrumentos, es decir, dirigirlos como si fuera
una orquesta.
La ventaja del MIDI es que es un estandard muy establecido y que la mayoria de aparatos musicales tienen
algun tipo de interficie MIDI. Pero, esta es, al parecer, su unica ventaja, pues, en todos los sentidos, el MIDI
limita por anticuado: polifonia, numero de aparatos, conectividad, longitud del cableado, velocidad... Esto
provoca, a menudo, que cada fabricante establezca su propia ampliacion del estandard aunque, por suerte,
mantienen, la compatibilidad con el MIDI basico.

2. Puertos de comunicacion y configuraciones


Cada dispositivo MIDI suele tener tres conectores.

MIDI IN: Por donde se reciben los mensajes.


MIDI OUT: Envia los mensajes propios y parte de los del MIDI IN.
MIDI THRU: Envia tan solo una copia integra de MIDI IN.

En MIDI, es muy importante la forma en que conectamos los dispositivos, pues la funcion de cada aparato varia
dependiendo de como y con quien lo conectemos.
Si estas empezando con MIDI, seguramente, la primera configuracion que haras sera conectar un instrumento a
tu ordenador. Tipicamente, se conectan los IN's con los OUT's, asi, cuando tocas el instrumento, podras
registrarlo en el ordenador y, despues de editar la interpretacion, podras escucharla en el instrumento.
El camino que siguen los mensajes MIDI, a traves de los dispositivos recibe el nombre de cadena. En la
configuracion anterior, estamos cerrando la cadena en un bucle. Si en vez de conectar las OUT conectamos las
THRU los mensajes no pararian de dar vueltas, con las OUT no porque las OUT suelen no transmitir aquellos
mensajes que el dispositivo ha capturado para si.

3. Canal MIDI.
Si conectamos una cadena de varios instrumentos, i se van pasando los mensajes unos a otros, tocaran todos lo
mismo? No, en principio no. MIDI utiliza un metodo de direccionamiento basado en canales.
Existen 16 canales MIDI a los cuales direccionar los mensajes. Cada elemento MIDI escucha una serie de
canales (canales propios). Para cada instrumento, estos canales pueden ser mas de uno o pueden canviar pero
los mensajes de configuracion se enviaran siempre por el mismo canal, el llamado canal basico del
instrumento. Por este canal recibira que canales ha de atender o el modo de operacion.
A pesar de las posibilidades que dan los canales, piensa que los 16 canales son una de las limitaciones mas
graves del protocolo MIDI.

4. Voz MIDI.
Se les llama voces de un dispositivo a los elementos sonoros (sonidos) de este. Lo mas facil es asociar el
concepto de voz al de nota, pues lo normal es que una voz sea una nota en particular de un instrumento en
particular. Aun asi no siempre 'voz' es equivalente a 'nota'. En las cajas de ritmos, por ejemplo, una voz indica
un elemento del kit de percusion: Las maracas, el bombo, los platillos...

5. Programa MIDI.
Un programa MIDI es una combinacion determinada de 127 voces. En un teclado, el concepto de programa se
corresponderia con el de instrumento: Cuando canviamos de instrumento substituimos las voces de un
instrumento por las de otro.
En las cajas de ritmo, pasaria algo similar pero los programas se corresponderian con kits de percusion.

6. Mensajes Basicos.
Los mensajes mas normales son los de Activacion y Desactivacion de nota. Corresponden con la accion de
pulsar y soltar una tecla o nota y reciben dos parametros: La voz (o nota) y la velocidad con que se pulsa o
suelta.

La voz se indica con un numero del 0 al 127. Cuando la voz corresponde a una nota el 60 suele ser el Do medio
y cada escala ocupa 12 posiciones. La velocidad es un indicador de la intensidad de la nota. El valor va de 0 a
127 siendo el 64 una velocidad 'normal'.
NB: Un mensaje de activacion con velocidad 0 equivale a un mensaje de desactivacion (con velocidad 64).
La velocidad ayuda a dar mayor expresividad a la sequencia, pero, a veces no es suficiente. Aparece entonces el
mensaje de Postpulsacion que indica una variacion de la intensidad de la nota mientras esta siendo tocada.
Tambien necesita que se indique la nota y la 'velocidad';
Tambien tenemos un mensaje de cambio de programa. El programa se indica con un numero del 0 al 127.
Para controlar el volumen, los efectos, la configuracion y demas, tenemos los mensajes de cambio de control.
En el mensaje se indica el numero de control que se quiere modificar (0 a 127) y el valor que adopta dicho
control (0 a 127).
Todos estos mensajes van direccionados a un canal pero hay otro tipo de mensajes que van dirigidos a todos los
elementos. Son mensajes de sistema. Su funcion principal es sincronizar, activar, gestionar... todos los
elementos de la cadena.

7. Ampliando informacion sobre MIDI


En el doctorial de MIDI de los Modders encontraras informacion mucho mas extensa sobre MIDI.
El MIDI DoC esta estructurado como manual de referencia de tal forma que cada una de las secciones puede
ser consultada por separado. Tratan en detalle los siguientes temas:

Especificaciones concretas del Hardware de conexion y el protocolo de comunicacion.


Descripcion de todos los mensajes MIDI y su formato.
Descripcion funcional de los aparatos que suelen estar conectados en una cadena MIDI.
Especificacion del estandard General MIDI.
Estandares de formatos para ficheros con sequencias MIDI.

Manual realizado por David Garca Garzn (Vokimon)

Indice

0. Introduccion al MIDI
1. Especificacion MIDI
o 1.1. Hardware de conexion
o 1.2. Conceptos Basicos
o 1.3. Tipos de estados
o 1.4. Tipos de mensajes
o 1.5. Mensajes de modo de canal
o 1.6. Mensajes de voces de canal
o 1.7. Mensajes de sistema comunes
o 1.8. Mensajes de sistema de tiempo real
o 1.9. Mensajes de sistema exclusivos
2. Aparatos MIDI
o 2.1. Vision general
o 2.2. Teclado Mudo
o 2.3. Pedales y palancas MIDI
o 2.4. Secuenciador
o 2.5. Lanzadores
o 2.6. Arpegiadores y harmonizadores
o 2.7. Generador de sonidos sintetitzados (sintetizador)

2.8. Generador de sonidos basado en grabaciones (sampler)


2.9. Caja THRU
2.10. Filtro MIDI
2.11. Canalizador MIDI
2.12. Monitor MIDI
2.13. Multiprocesador
3. General MIDI
o 3.1. Introduccion
o 3.2. Instrumentos General MIDI
o 3.3. Kit de percusion General MIDI
o 3.4. Controles General MIDI
o 3.5. Recomendaciones para los sistemas General MIDI
4. Archivos Estandard MIDI (SMF)
o 4.1. Vision general
o 4.2. Chunk de cabezera
o 4.3. Chunk de pista
o 4.4. Metaeventos
5. Ampliaciones de MIDI 1.0
Bibliografia, Links y Referencias
o
o
o
o
o
o

0. Introduccion al MIDI.
MIDI es un protocolo de comunicacion digital entre intrumentos musicales que se empezo a usar en los 70 y
que ya hace tiempo que esta consolidado como la interficie entre instrumentos por excelencia.
Lo que se envia por MIDI no es el sonido que producen los instrumentos, sino los eventos: Cuando se pulsa una
nota, cuando se varia un control... Permite sincronizar y sequenciar instrumentos, almacenar una interpretacion
para su posterior edicion y reproduccion...
La ventaja del MIDI es que es un estandard muy establecido y que la mayoria de aparatos musicales tienen
algun tipo de interficie MIDI. Pero, esta es, al parecer, su unica ventaja, pues, en todos los sentidos, el MIDI
limita por anticuado: polifonia, numero de aparatos, conectividad, longitud del cableado, ancho de banda... Esto
provoca, a menudo, que cada fabricante establezca su propia ampliacion del estandard aunque, por suerte,
mantienen, la compatibilidad con el MIDI basico.

1. Especificaciones MIDI
1.1. Hardware de conexion
Interfaz serie: A 31,250 Kb/s (1% de tolerancia) asincrono con un start bit, ocho bits de datos empezando por
el menos significativo y un stop bit, sin bit de paridad. Se realiza por bucle de corriente: 5 mA -> zero logico y
1uA -> uno logico. Entradas optoaisladas con un tiempo de respuesta de 2ns o menor.
Conectores: DIN de 5 pins (180o). Se utilizan 3: In(4), Out(5) y massa(2). La longitud maxima del cable es de
15 metros y tiene que ser trenzado y apantallado con la pantalla conectada al pin 2 en ambos extremos. Las
patillas 1 y 3 se dejan sin conectar.
Puertos MIDI.
Los elementos MIDI se conectan mediante tres tipos de puertos.

MIDI IN: Entran datos desde otros dispositivos.


MIDI OUT: Salen los datos del MIDI IN mas los que produce el dispositivo.
MIDI THRU: Sale una copia de los datos del MIDI IN sin anyadir los que produce el dispositivo. Solo
los amplifica y corrige a modo de repetidor.

Configuraciones tpicas:

Cadena: Lo que envia el director lo interpretan todos pero lo que se toca en los otros no es enviado a
los demas.
Bucle: Los dispositivos envian informacion al director y este la distribuye posteriormente. Se utiliza
mucho en composicion cuando el director es, por ejemplo, un ordenador que almacena lo que interpreta
un instrumento, y, despues de editarlo, se devuelve al instrumento para escuchar el resulado.
Estrella: En cadenas muy largas, se suelen producir errores de comunicacion y retardos. Un director,
con mas de una salida, que envia mensajes por cada una de ellas a un dispositivo diferente reduce la
longitud de las cadenas.
Hibridos Se pueden combinar hasta la saciedad. Cada situacion tiene su configuracin apropiada.

1.2. Conceptos basicos


Canal MIDI: Un canal MIDI sirve para direccionar los mensajes que se envian a un instrumento o a otro. El
estandard MIDI utiliza 16 canales.
Canales propios de un instrumento: Canales a los que hace caso.
Canal basico de un instrumento: Canal por el que recibe los mensajes de modo (Configuracion).
Voces de un instrumento: Elementos de generacion de sonido de los que consta el dispositivo. P.ej: Las notas
son las voces de un sintetizador pero en el caso de una caja de ritmos las voces serian cada uno de los elementos
de percusion.
Notas: Cuando una voz se corresponde a una nota, se suele asociar el Do medio al valor 60. Se considera el
rango 0-127 con una resolucin de un semitono lo que da una amplitud de 10 octavas que no todos los
dispositivos alcanzan. Cuando esto sucede, se ignoran o se trasladan a otra octava.
Pulsacion o velocidad: Es la fuerza o velocidad con que se pulsa, mantiene o suelta una voz. Se suele ponderar
en escala logaritmica aunque no hay fijado un estandard. 0 es pulsacion minima mientras que 127 es la maxima.
En ausencia de esta caracteristica se envia un 64.
Control: Es un parametro controlable de un sintetizador como el volumen, la afinacion... Existen de dos tipos
de controles: continuos y conmutados. Suelen equivaler al accionamiento de un interruptor, un potenciometro,
o un pedal.
Control contnuo: Tienen una gama de valores posibles como el volumen, ataque y sostenimiento de nota... La
especificacion MIDI permite que sean de 7 bits (0-127) o de 14 bits (0-16383) aunque, en realidad, se
consideran todos de 14 bits, lo que pasa es que, como se modifican los bytes alto y bajo por separado, en
distintos mensajes, cuando tenemos uno de 7 bits solo modificamos la parte alta y la parte baja no se utiliza.
Control conmutado: Los conmutadores son controles que solo tienen dos posiciones que suelen ser ON (127)
y OFF (0). Cualquier otro valor se ignora.

1.3. Tipos de estados.


Por el cable MIDI circulan dos tipos de bytes:
Bytes de estado: Tienen el MSB (Most Significant Bit) a uno. Son los que indican el tipo de mensaje que se va
a enviar.
Bytes de datos: Tienen el MSB a cero. Contienen los parametros del comando/estado indicado en el byte de
estado.
El estado de un dispositivo MIDI determina de que manera entendera los siguientes bytes de datos que reciba.
Cada estado se alcanza al recibir un byte de estado y se mantiene hasta recibir otro byte de estado que no sea de
tiempo real. Los mensajes de tiempo real interrumpen el estado pero no lo cambian.
Estados de ejecucion: Solo valido para mensajes de canal (voz y modo). No es necesario reenviar el byte de
estado si es el mismo. Los mensajes cuyos grupos de bytes de datos no lleguen completos se ignoraran.
Estados no implementados: Se establece cuando llega un byte de estado de un comando, que, aunque
pertenezca al protocolo MIDI, el instrumento no interpreta. El protocolo MIDI propone que se ignore dicho
byte y los posteriores bytes de datos.
Estados indefinidos: Bytes de estado que no existen en el protocolo MIDI. Si se envian es debido a un error
(apagado o encendido, ruido...) El protocolo MIDI propone que se ignore dicho byte y los posteriores bytes de
datos.

1.4. Tipos de mensaje.


Mensajes de canal: Los que van dirigidos a un canal especifico. Dicho canal se indica en los 4 bits bajos del
byte de estado y en los 4 altos se indica el comando/estado.

De voz: Contienen lo que se toca por un canal.


De modo: Se envian por el canal basico del instrumento y son los que definen la respuesta a los
mensajes de voz.

Mensajes de sistema: Son los que no se ligan a un canal. Los 4 bits altos de byte de estado estan a uno y los
bajos indican el comando.

Comunes: Dirigidos a todos los canales MIDI.


De tiempo real: Tambien van dirigidos a todos los canales pero que interrumpe momentaneamente el
ciclo de comunicacion. (Son mensajes urgentes)
Exclusivos: Comandos especificos de un instrumento. Fijados por el fabricante del mismo cuyo ID
encabeza los bytes de datos.

1.5. Mensajes de modo de canal.


Estado de cambio de modo: En realidad es el estado de canvio de control 1011nnnn donde nnnn indica el
canal basico al que afecta. Todas las notas que se esten reproduciendo en el canal se paran.
Modo Omni On: El instrumento puede recibir los mensajes de voz por cualquiera de los canales aunque no
sean suyos.
OMNI ON: 1011nnnn 01111101 00000000
Modo Omni Off: Se desactiva. Solo hace caso a los mensajes de los canales propios.
OMNI OFF: 1011nnnn 01111100 00000000

Modo Monofonico: En modo monofonico, un canal se corresponde con una voz. Se indica en los bytes de
datos (uuuuuuu) que numero de canales asignados en este modo a partir del canal basico. si uuuuuuu es cero
seran los todos los que tenga el instrumento.
MONOFONICO: 1011nnnn 01111110 0uuuuuuu
Modo Polifonico: Cada canal puede controlar mas de una voz simultaneamente.
POLIFONICO: 1011nnnn 01111111 00000000
Desactivar todas las notas: Los cuatro anteriores tambien lo hacen pero este permite hacerlo sin necesidad de
conocer el modo de operacion actual ni cambiarlo.
DESACTIVA TODA NOTA: 1011nnnn 01111011 00000000
Modo Control Local ON/OFF: El control local del dispositivo se puede activar o desactivar con este mensaje.
Se puede as hacer que el dispositivo solo haga caso al control MIDI. XXXXXXX es 1111111 para activado y
0000000 para desactivado.
CONTROL LOCAL: 1011nnnn 01111010 0XXXXXXX
Reajuste de Controles: Es una funcion asignada posteriormente al estandard. Lo que hace es inicializar los
controles como el volumen y el pitch.
REAJUSTE CONTROLES: 1011nnnn 01111001 00000000

1.6. Mensajes de voces de canal.


Estado Desactivacion de voz: Indica que se desactiva una voz (deja de sonar una nota)
El byte de estado es 1000nnnn y se sirve de dos bytes de datos. El primero indica la voz que se desactiva y el
segundo la velocidad o fuerza de pulsacion con que lo hace.
Estado Activacion de voz: Indica que se activa una voz (empieza a sonar una nota)
El byte de estado es 1001nnnn y se sirve de dos bytes de datos. El primero indica la voz que se activa y el
segundo la velocidad o fuerza de pulsacion con que lo hace, igual que en el de desactivacion. Una activacion
de velocidad 0 es equivalente a una desactivacion.
Estado Pulsacion de teclado polifonico: Indica una variacion de la pulsacion de la voz.
El byte de estado es 1010nnnn y comparte el formato que usan Activacion y Desactivacion para los bytes de
datos.
Estado Cambio de control (1011nnnn): Indica un cambio en el valor de un control. Hace servir dos bytes de
datos: El primero indica el control que se desea modificar y el segundo el nuevo valor para dicho control. La
especificacion MIDI solo determina el tipo de los controles pero no restringe el control en concreto al que
corresponde cada numero.

000-031 Controles continuos (partes altas)


032-063 Controles continuos (partes bajas de los anteriores)
064-095 Controles conmutados
096-120 No definidos en MIDI
121-127 No son controles sino los mensajes de modo de canal explicados anteriormente.

Estado Cambio de programa (1100nnnn): Solo necesita un byte de datos que indica un programa del 0 al
127.
Estado Presion de canal (1101nnnn): Es similar al de Pulsacion de teclado polifonico pero afecta a todas las
notas del canal especificado. Por lo tanto solo requiere un byte de datos, el de presion.
Estado Modificacion del pitch (1110nnnn): De los dos bytes de datos que necesita, el primero es el byte
menos significativo y el segundo el mas significativo. El valor central del pitch es 2000h y la sensibilidad de
variacion del pitch se selecciona en el receptor.

1.7. Mensajes comunes de sistema


Mensaje de trama temporal MIDI (11110001): Lleva un solo byte de datos 0nnnxxxx donde nnn indica el
tipo de codificacion y xxxx el valor. Para mas informacion sobre los codigos temporales se aconseja consultar
la bibliografia.
Mensaje de posicion de cancion (11110010): Determina con dos bytes de datos cual es la posicion actual de la
cancion en golpes de ritmo MIDI (un golpe de ritmo cada seis pulsos de reloj). El primero es el menos
significativo y el segundo el mas significativo.
Mensaje de seleccion de cancion (11110011): Un solo byte de datos indica el numero de cancion que sera
interpretada una vez llege el mensaje de tiempo real de inicio.
Mensaje de requerimiento de entonacion (11110110): Lo utilizan los sintetizadores analogicos (que tiempos
aquellos...) para sintonizar sus osciladores. No llego a ver claro su funcion, pero si algun dia te las tienes que
ver con un analogico y te enteras, no estaria de mas que me lo explicases.
Mensaje de fin de exclusivo (11110111): Se utiliza para finalizar los mensajes de sistema exclusivos aunque
dicha funcion la puede realizar cualquier otro byte de estado que no sea de tiempo real. No tiene bytes de datos.
NB: Los mensajes comunes de sistema 11110100 y 11110101 son estados no definidos en la norma hasta una
futura ampliacion.

1.8. Mensajes de sistema de tiempo real.


Reloj de temporizacion (11111000): El sistema, si lo envia, lo hace con una candencia de 24 por cuarto de
nota.
Inicio (11111010): El sistema lo envia al iniciar una pieza. Generalmente es el instrumento maestro quien lo
hace.
Continuacion (11111011): El sistema lo envia cuando quiere continuar tocando una pieza que ha parado. Se
empezara a tocar en el siguiente pulso de reloj.
Parada (11111100): El sistema lo envia para detener la secuencia.
Espera activa (11111110): El sistema lo envia cada 300 milisegundos. Los sistemas MIDI no estan obligados a
hacerlo, ni receptor ni transmisor. En el caso de que un receptor reconozca dicho mensaje, una vez que reciba
uno, si antes de 300 milisegundos no ha recibido otro mensaje de qualquier tipo, desactivara las voces y volvera
a modo de operacion normal. Si un transmisor lo envia, lo habra de hacer cada 300 milisegundos de inactividad
si no quiere que algunos receptores se descuelguen.
Reset del sistema (11111111): Resetea todos los intrumentos que lo reciben.
NB: Los mensajes de tiempo real 11111001 y 11111101 son estados no definidos en la norma hasta una futura
ampliacion.

1.9. Mensajes de sistema exclusivos


Estos mensajes sirven para ampliar los estandards MIDI para un intrumento en concreto. Empiezan con el byte
de estado 11110000. Los bytes de datos que siguen identifican el fabricante. A partir de aqui el formato depende
de el fabricante, por eso es esencial que si el fabricante no es el correcto, el mensaje se ignore.
Los mensajes exclusivos de sistema van dirigidos a todos los canales por lo que si hay dos instrumentos del
mismo tipo, ambos lo recibiran. Por esta razon, generalmente se incluye en el formato de fabricante algun tipo
de direccionado basado en canal MIDI o no.

El estado acaba cuando entra un mensaje de fin de exclusivo (11110111) o cualquier otro byte de estado que no
sea de tiempo real.

1.10. Controles MIDI


CONTROLES ESPECIFICADOS (HEX)
Ajuste MSB
00 Seleccion de banco (coarse)
01 Modulation Wheel (coarse)
02 Breath controller (coarse)
04 Foot Pedal (coarse)
05 Portamento Time (coarse)
06 Data Entry (coarse)
07 Volume (coarse)
08 Balance (coarse)
0A Pan position (coarse)
0B Expression (coarse)
0C Effect Control 1 (coarse)
0D Effect Control 2 (coarse)
10 General Purpose Slider 1
11 General Purpose Slider 2
12 General Purpose Slider 3
13 General Purpose Slider 4
Ajuste LSB
20 Bank Select (fine)
21 Modulation Wheel (fine)
22 Breath controller (fine)
24 Foot Pedal (fine)
25 Portamento Time (fine)
26 Data Entry (fine)
27 Volume (fine)
28 Balance (fine)
2A Pan position (fine)
2B Expression (fine)
2C Effect Control 1 (fine)
2D Effect Control 2 (fine)
Interruptores
40 Hold Pedal (on/off)
41 Portamento (on/off)
42 Sustenuto Pedal (on/off)
43 Soft Pedal (on/off)
44 Legato Pedal (on/off)
45 Hold 2 Pedal (on/off)
50 General Purpose Button 1 (on/off)
51 General Purpose Button 2 (on/off)
52 General Purpose Button 3 (on/off)
53 General Purpose Button 4 (on/off)

Generacion de sonido
46 Sound Variation
47 Sound Timbre
48 Sound Release Time
49 Sound Attack Time
4A Sound Brightness
4B Sound Control 6
4C Sound Control 7
4D Sound Control 8
4E Sound Control 9
4F Sound Control 10
Efectos
5B Effects Level
5C Tremulo Level
5D Chorus Level
5E Celeste Level
5F Phaser Level
Parametros
60 Data Button increment
61 Data Button decrement
62 Non-registered Parameter (fine)
63 Non-registered Parameter (coarse)
64 Registered Parameter (fine)
65 Registered Parameter (coarse)
Modo de canal
78 All Sound Off
79 All Controllers Off
7A Local Keyboard (on/off)
7B All Notes Off
7C Omni Mode Off
7D Omni Mode On
7E Mono Operation
7F Poly Operation

1.10. Parametros MIDI


Los parametros son una puerta abierta al limite de los 128 controles MIDI. Se agrupan en dos grupos, los
registrados, que dependen de las especificaciones, y los no registrados disponibles para los implementadores.
Permiten asociar los numeros del 0 al 63.383 a cualquier parametro de un aparato y controlarlo via MIDI.
Para hacerlo primero hemos de indicar la parte alta y la parte baja del numero del parametro con los mensajes
de control adecuados: 62h y 63h para los no registrados o 64h y 65h para los registrados. Una vez seleccionado
el parametro, utilizamos otros controles para incrementar el parametro una cantidad (61h), decrementarlo (60h),
fijar los 7 bits mas significativos (06h) o los menos significativos (26h).
Controles Para Cambiar Parametros (HEX)
06 Ajuste brusco del parametro (MSB)
26 Ajuste fino del parametro (LSB)

60
61
62
63
64
65

Decrementa el parametro en una cantidad


Incrementa el parametro en una cantidad
Indica un parametro no registrado a ajustar (LSB)
Indica un parametro no registrado a ajustar (MSB)
Indica un parametro registrado a ajustar (LSB)
Indica un parametro registrado a ajustar (MSB)

2. Aparatos MIDI
2.1. Vision general
A parte de los instrumentos, los generadores de sonido y los sequenciadores, existen otros elementos mas
discretos, pero igual de utiles en una configuracion MIDI, gracias a los cuales podemos sacarle un mayor
partido.
Hoy en dia muchos de los elementos aqui citados, suelen estar acoplados entre si en una sola unidad. El
ejemplo mas claro de esto es el ordenador que, gracias a su versatilidad, practicamente, puede hacer las
funciones de cualquier elemento MIDI. Aun asi, no siempre se amortiza un equipo que haga demasiadas
funciones.
Los elementos pueden hacer tres tipos de funciones:

Generador MIDI: Son las fuentes de mensajes MIDI.


Consumidor MIDI: Transforma el mensaje MIDI en sonido (generador de sonido) o otro tipo de senyal
(VideoMIDI, psicodelicos...)
Procesador MIDI: Reciben MIDI y emiten MIDI haciendo algun tipo de proceso.

2.2. Teclado Mudo


Protocolos como el MIDI han permitido que se pueda separar el el instrumento en si, y el aparato que genera el
sonido, de tal forma un teclado mudo, por ejemplo, tan solo enviaria mensajes MIDI que directamente a otro
modulo generador de sonidos que es el que suena realmente.
Un generador de sonidos puede ser un sintetizador, un sampler, un ordenador... cualquier elemento MIDI que
genere sonido.
Es muy importante el grado de configurabilidad de un teclado mudo. Lo mas normal es que ofrezca sensibilidad
a la expresion (velocidad de pulsacion) y que ofrezca la posibilidad de enviar mensajes de control mediante uno
o varios pedales o palancas incorporadas.

2.3. Pedales y palancas MIDI


Los mensajes de control, en general, necesitan otro tipo de entrada por parte del interprete que no puede ser por
teclado. Para ello, no hay nada mejor que un pedal que deje las manos libres.
Los pedales MIDI son unos pedales especiales que envian un determinado mensaje de control (configurable o
no) al teclado o directamente a la cadena MIDI. Los hay, tambien, ke modifican el pitch, la pulsacion...
Las palancas o ruedas suelen estar incorporadas en los teclados. La funcion es parecida pero ahora es el teclado
mismo quien genera la mensajeria MIDI. Las ruedas casi siempre hacen funciones de pitch pero tambien las
hay configurables.
Tambien hay una serie de pedales que no son MIDI, que dependen del teclado. Estos pedales no envian al
teclado mensajes MIDI, pero sirven para modificar la interpretacion del teclado y, en consecuencia, su salida
MIDI, de forma similar a las ruedas.

2.4. Secuenciador
Un secuenciador permite generar sequencias MIDI en frio para reproducirlas despues de forma sincronizada.
Por lo general, el aparato ofrece la posibilidad de crear la secuencia con un metodo que consiste en llenar los
espacios de un compas con determinadas notas. No tenemos, pues, que interpretarla con un instrumento.
Esta claro que si nos ceimos a los 16 espacios ke suele tener el sequenciador y a poner o no una nota, se limita
mucho la expresividad de las sequencias por lo que, ademas se nos permite variar varios parametros de cada
uno de los 16 slots: Retardo, si se prolonga al siguiente slot, si hay un slide o el valor de uno o varios controles
del generador de sonidos.
Tambien existen los llamados DNA. Un DNA es una serie de parametros de retardo, enfasis... que se recogen a
partir de un interprete real y que se aplican a la sequencia en question. Dan mucha mas personalidad dado que
cada interprete y cada estilo tienen su propio DNA. Tan solo tengo noticias de DNA's aplicados a las sequencias
de percusion, pero pronto se aplicaran tambien a otro tipo de sequencias.

2.5. Lanzadores
Un lanzador es un modulo que almazena sequencias MIDI y que, a una senyal de el interprete, lanza una o otra
sequencia a la cadena. El modulo que hace de lanzador, suele permitir guardar las sequencias en un soporte no
volatil.
La funcion de lanzador de sequencias suele estar en el teclado o en el ordenador.

2.6. Arpegiadores y harmonizadores


El arpegiador es un modulo que a partir de un acorde y un patron, genera la sequencia MIDI para el
correspondiente arpegio.
El harmonizador hace lo propio agregando, a la sequencia MIDI, las notas de acompanyamiento que
harmonizan con lo que le entra.
Estos dos modulos suelen estar incluidos en teclados, sequenciadores y lanzadores.
En cuanto a dispositivos originadores de mensajes MIDI la variedad de funciones no va mucho mas alla de los
explicado y de los clasicos instrumentos MIDI: Guitarras, Saxofones, Cajas de ritmos...

2.7. Generador de sonidos sintetitzados (sintetizador)


En su mayor parte, los consumidores de mensajes MIDI son generadores de sonido aunque bien pueden ser tan
variados (psicodelicos, automatas MIDI, transcriptores de partituras... imaginacion!)
Existen dos grandes familias de generadores de sonidos: Los sintetizadores y los samplers.
Un sonido sintetizado es aquel que se produce a partir del procesado analogico o digital de una o varias
senyales simples. Las senyales simples que mas se utilizan son las ondas triangulares, de dientes de sierra,
sinosuidales, cuadradas... Los procesos mas extendidos son la modulacion, el filtrado frequencial, la distorsion,
las envolventes...
La mayoria de procesos (digitales o analogicos) dependen de una serie de parametros que se modifican para
obtener un sonido o otro. Hay un manual especialmente dedicado a explicar este tipo de generacion de sonidos.
Los sintetizadores suelen tener un banco de sonidos donde guardan los parametros de cada uno, y, por lo
general, permiten que se programen nuevos.

2.8. Generador de sonidos basado en grabaciones (sampler)


Este tipo de generador no parte de una onda simple sino de una onda grabada. Necesitan mucha mas memoria
para almazenar los sonidos pero se obtienen sonidos bastante mas verosimiles.
Los samplers tambien aplican filtros, envolventes y otros procesos a la seal para dar mayor expresividad al
sonido.
Se puede encontrar mas informacion sobre las tecnicas sampleado en los otros manuales.
Las muestras de sonido son siempre digitales pero los procesos tambien pueden ser digitales o analogicos.

2.9. Caja THRU


Una caja THRU es un simple aparato que tiene una entrada IN y n salidas THRU. Sencillamente duplica la
entrada en las salidas, dividiendo la cadena MIDI en n cadenas (configuracion en estrella). De esta manera se
pueden evitar cadenas excesivamente largas y los problemas que estas comportan.
En cadenas largas se produce, por ejemplo, el problema del retardo debido al tiempo que tarda en llegar un
mensaje del primer al ultimo elemento.
Tambien existe el problema de la degradacion. Cada vez que la senyal pasa por un elemento las transiciones de
la senyal se hacen mas tenues, y, al final, acaban siendo indistinguibles.

2.10. Filtro MIDI


El filtro MIDI es un aparato que elimina de forma selectiva mensajes MIDI. Tiene una entrada IN y una salida
OUT. Los hay especificos o programables segun se pueda o no elegir el tipo de mensaje a filtrar.
Hay que tener cuidado al disear filtros, pues, si simplemente se eliminan los mensajes a filtrar, cabe la
posibilidad que el resto de mensajes queden inconsistentes.
Un filtro permite reducir el nivel de mensajes que circulan por la cadena para que no se produzca saturacion.
La saturacion es el hecho de que un puerto MIDI no pueda procesar todos los mensajes que le llegan mas los
que genera.
Los filtros son tambien una opcion muy buena para controlar los instrumentos que solo pueden funcionar en
modo Omni para que formen parte de una cadena. Los instrumentos Omni no hacen seleccion de canal por lo
que no podemos direccionar mensajes solo a un instrumento, sin que el Omni tambien lo toque, pero si
introducimos antes del instrumento Omni un filtro para los mensajes de un canal determinado, podria funcionar
correctamente.

2.11. Canalizador MIDI


La funcion del canalizador es transportar los mensajes dirigidos a cierto canal hacia otro, pues no siempre
podemos hacer coincidir el canal de salida de un aparato y el de entrada de otro.

2.12. Monitor MIDI


Sirve para visualizar el tipo de mensajes que circulan por un punto en la cadena. Generalmente, suele constar de
una serie de LED's que se iluminan cuando estos mensajes pasan.

2.13. Multiprocesador
Los multiprocesadores son aparatos programables basados en un microprocesador. Estos aparatos permiten
realizar cualquier tipo de proceso a la secuencia de mensajes MIDI que nuestra habilidad como programadores
nos permita.
Hoy en dia este tipo de tarea la suele realizar un ordenador, pero a veces, un ordenador tiene un tiempo de
respuesta (latencia MIDI) excesivo para que la sequencia no se demore demasiado.
Un ordenador tiene, a menudo, otras cosas a las que atender y se produce lo que se llama una alta latencia
MIDI, es decir, se tarda demasiado en responder. Por eso, aveces, es aconsejable dedicar uno de estos pequeos
procesadores exclusivamente al proceso MIDI.

3. General MIDI
3.1. Introduccion
General MIDI es un estandard, aadido a MIDI, que intenta garantizar que la musica realizada en un equipo de
un fabricante se pueda interpretar en otro equipo de un fabricante diferente y suene de forma similar a como fue
concebido.
Un dispositivo General MIDI ha de cumplir los siguientes requisitos:

Los canales del 1 al 16 han de tener una polifonia minima de 24 voces cada uno.
El canal 10 reservado para instrumentos de percusion y el resto para los melodicos.
Los numeros de programa asociados a un conjunto estandard de 128 intrumentos.
Un kit de percusion estandard para usar en el canal 10.
Reconocer como minimo un subconjunto de controles de los controles recomendados.
Ha de ser sensible a la velocidad.
Recorrido de la rueda picht bend de +/- 2 semitonos.

Este sello, garantiza que un aparato cumple estas especificaciones.

3.2. Instrumentos General MIDI


El kit de instrumentos que define General MIDI se compone de 16 grupos con 8 instrumentos cada uno. Los
grupos definidos son los siguientes:
Piano
00 Acoustic Grand Piano
01 Bright Acoust. G.Piano
02 Electric Grand Piano
03 Honky-tonk Piano

Percusion Cromatica
04 Rhodes Piano
05 Chorused Piano
06 Harpsichord
07 Clavinet

Organos
10 Hammond Organ
11 Percussive Organ
12 Rock Organ
13 Church Organ

14 Reed Organ
15 Accordion
16 Harmonica
17 Tango Accordion

08 Celesta
09 Glockenspiel
0A Music box
0B Vibraphone

0C Marimba
0D Xylophone
0E Tubular Bells
0F Dulcimer
Guitarra

18 Acoustic Guitar1
19 Acoustic Guitar2
1A Electric Guitar1
1B Electric Guitar2

1C Electric Guitar3
1D Overdrive Guitar
1E Distorton Guitar
1F Guitar Harmonics

Bajo
20 Acoustic Bass
21 Electric Bass 1
22 Electric Bass 2
23 Fretless Bass

Cuerda
24 Slap Bass 1
25 Slap Bass 2
26 Synth Bass 1
27 Synth Bass 2

28 Violin
29 Viola
2A Cello
2B Contrabass

Ensemble
30 String Ensemble1
31 String Ensemble2
32 SynthStrings 1
33 SynthStrings 2

34 Choir Aahs
35 Voice Oohs
36 Synth Voice
37 Orchestra Hit

Metales
38 Trumpet
39 Trombone
3A Tubah
3B Muted Trumpet

Lenguetas
40 Soprano Sax
41 Alto Sax
42 Tenor Sax
43 Baritone Sax

44 Oboeh18
45 English Horn
46 Bassoon
47 Clarinet

Sintetizador solista
50 Lead 1 square
51 Lead 2 sawtooth
52 Lead 3 caliope
53 Lead 4 chiff

54 Lead 5 charang
55 Lead 6 voice
56 Lead 7 fifths
57 Lead 8 brass
64 FX 5 brightness
65 FX 6 goblins
66 FX 7 echoes
67 FX 8 sci-fi

48 Piccolo
49 Flute13
4A Recorder
4B Pan Flute

74 Taiko Drum
75 Melodic Tom
76 Synth Drum
77 Reverse Cymbal

4C Bottle Blow
4D Shakuhachi
4E Whistle
4F Ocarina

Sintetizador Acompaamiento
58 Pad 1 new age
59 Pad 2 warm
5A Pad 3 polysynth
5B Pad 4 choir

5C Pad 5 bowed
5D Pad 6 metallic
5E Pad 7 halo
5F Pad 8 sweep

Etnicos
68 Sitar4
69 Banjo5
6A Shamisen
6B Kotoh7

Percusion
70 Tinkle Bell
71 Agogo13
72 Steel Drums
73 Woodblock

3C French Horn
3D Brass Section
3E Synth Brass 1
3F Synth Brass 2

Tubos

Sintetizador Efectos
60 FX 1 rain
61 FX 2 soundtrack
62 FX 3 crystal
63 FX 4 atmosphere

2C Tremolo Strings
2D Pizzicato StringS
2E Orchestral Harp
2F Timpani

6C Kalimba
6D Bagpipe
6E Fiddlet
6F Shanai0
Efectos

78 Guitar FretNoise
79 Breath Noise
7A Seashore
7B Bird Tweet

7C Telephone Ring
7D Helicopter
7E Applause
7F Gunshot

3.3. Kit de percusion General MIDI


El kit de percusion define los elementos sonoros que iran asociados a algunas de las voces que se tocan por el
canal 10.
Voz

Sonido Asociado

Voz

Sonido Asociado

35

Acoustic Bass Drum

59

Ride Cymbal 2

36

Bass Drum 1

60

Hi Bongo

37

Side Stick

61

Low Bongo

38

Acoustic Snare

62

Mute Hi Conga

39

Hand Clap

63

Open Hi Conga

40

Electric Snare

64

Low Conga

41

Low Floor Tom

65

High Timbale

42

Closed Hi-Hat

66

Low Timbale

43

HighFloorTom

67

High Agogo

44

Pedal Hi-Hat

68

Low Agogo

45

Low Tom

69

Cabasa

46

Open Hi-Hat

70

Maracas

47

Low-Mid Tom

71

Short Whistle

48

Hi-Mid Tom

72

Long Whistle

49

Crash Cymbal 1

73

Short Guiro

50

High Tom

74

Long Guiro

51

Ride Cymbal 1

75

Claves

52

Chinese Cymbal

76

Hi Wood Block

53

Ride Bell

77

Low Wood Block

54

Tambourine

78

Mute Cuica

55

Splash Cymbal

79

Open Cuica

56

Cowbell

80

Mute Triangle

57

Crash Cymbal 2

81

Open Triangle

58

Vibraslap

3.4. Controles General MIDI


Es necesario, como minimo que un dispositivo General MIDI reconozca los siguientes controles:
# Control

Descripcion

Comentarios

Modulation

usually hard-wired to control LFO amount, ie, vibrato),

Main Volume

10

Pan

11

Expression

64

Sustain

121

Reset All Controllers

123

All Notes Off

3.5. Recomendaciones para los sistemas General MIDI


Lo que siguen son recomendaciones, no requisitos.
Parametros registrados MIDI

Pitch Wheel Bend Range (0),


Fine Tuning (1),
Coarse Tuning (2).

Si se incluyen los parametros de afinacion, la afinacion inicial debera ser la referencia estandard: 440 Hz para el
La medio.
Recomendaciones sobre mensajes exclusivos de sistema:
General MIDI On:
0xF0
0x7E
[dd]
0x09
0x01
0xF7

Byte de Estado (SysEX)


Fabricante: Universal Non-Real Time
Identificador de dispositivo destino (0x7F para Broadcast)
Protocolo: General MIDI Message
Mensaje: General MIDI On
Fin de SysEx

General MIDI Off:


0xF0
0x7E
[dd]
0x09
0x02
0xF7

Byte de Estado (SysEX)


Fabricante: Universal Non-Real Time
Identificador de dispositivo destino (0x7F para Broadcast)
Protocolo: General MIDI Message
Mensaje: General MIDI Off
Fin de SysEx

Roland GS Mode: F0 41 10 42 12 40 00 7F 00 41 F7
GM Master Volume: F0 7F 7F 04 01 ll mm F7 (ll=LSB, mm=MSB - use 7F 7F for maximum volume)
GM Master Balance: F0 7F 7F 04 02 ll mm F7 (ll=LSB, mm=MSB - use 00 40 for centre balance)

NOTA: Los cambios de volumen y balanceado como SysEx se difieren del cambio de control en que los
controles se refieren al canal y los SysEx al dispositivo.

4. Archivos estandar MIDI (SMF)


4.1. Vision general
Los archivos SMF (Standard MIDI Files) se utilizan para almacenar secuencias MIDI y casi siempre llevan la
extension .MID. Un archivo SMF puede contener varias secuencias MIDI, cada una, en una pista o track.
El formato de estos archivos los distribuye en chunks. El primer chunk es el de cabecera, o header chunk, y el
resto son chunks de pistas, o track chunks.
Cada chunk va precedido por cuatro bytes de identificacion y cuatro mas que indican la longitud en bytes del
resto del chunk. Despues viene el contenido.

4.2. Chunk de cabecera


El identificador del chunk de cabezera es 'MThd'. La longitud de este chunk siempre es la misma, 6 bytes. Los
dos primeros bytes determinan el tipo de fichero.

0 Pista Unica.
1 Pista Multiple sincrona. Todas las pistas empiezan al mismo tiempo y llevan el mismo reloj.
2 Pista Multiple asincrona. Cada pista puede empezar cuando quiera y ademas tiene un clock propio.

Los siguientes dos bytes codifican el numero de pistas del fichero y los dos ultimos el numero de tiempos de
delta por cuarto de nota cuyo significado se vera mas adelante.

4.3. Chunk de pista


Los chunks de pista tienen el identificador 'MTrk'. Una vez indicada la longitud del chunk vienen los eventos
MIDI. Cada evento MIDI viene precedido por un tiempo de delta que tiene que passar antes de enviarlo.
Dicho tiempo de delta se especifica de la siguiente manera: Se divide el numero de deltas en palabras de 7 bits.
Se completa cada palabra con el bit 7 (el mas significativo) para tener bytes completos. El bit 7 sera 1 en todas
las palabras menos en la palabra menos significativa que valdra 0. En el fichero las palabras se colocan de mas
a menos significativas de tal forma que, cuando leamos la menos significativa (bit 7=0), sabemos que ha
acabado la delta y empieza un evento. El ultimo evento de cada track ha de ser el (meta) evento 2Fh 00h.

4.4. Metaeventos
Los metaeventos son eventos utilizados en los SMF que no estan definidos en el estandard MIDI. Siguen el
formato:
FF xx nn dd...

Empiezan todos con FF (11111111) seguido del identificador del comando (xx), la longitud de los datos en
bytes (nn) y los datos propiamente dichos (dd..)
Cuidado: Estos mensajes no se deben de enviar a la ligera por el puerto MIDI pues un FF significa un Reset
del sistema.
Aqui teneis algunos de los mas utilizados:
Hex Binary

Data

Description

00

00000000 nn ssss

Numero de Track.
nn=02 (length of 2-byte sequence number)
ssss=sequence number

01

00000001 nn tt ..

Evento de Texto
nn=length in bytes of text
tt=text characters

02

00000010 nn tt ..

Informacion de Copyright.
nn tt=same as text event

03

00000011 nn tt ..

Nombre del Track.


nn tt=same as text event

04

00000100 nn tt ..

Nombre del Intrumento del Track.


nn tt=same as text event

05

00000101 nn tt ..

Letra de la cancion.
nn tt=same as text event

06

00000110 nn tt ..

Marcador.
nn tt=same as text event

07

00000111 nn tt ..

Cue point
nn tt=same as text event

2F

00101111 00

Finalizador de track.

51

01010001 03 tttttt

Ajuste del tempo


tttttt=microseconds/quarter note

58

01011000 04 nn dd cc bb Time Signature


nn=numerator of time sig.
dd=denominator of time sig. 2=quarter, 3=eighth, etc.
cc=number of ticks in metronome click
bb=number of 32nd notes to the quarter note

59

01011001 02 sf mi

Key signature
sf=sharps/flats (-7=7 flats, 0=key of C, 7=7 sharps)
mi=major/minor (0=major, 1=minor)

7F

01111111 xx dd ..

Informacion especifica del sequenciador


xx=number of bytes to be sent
dd=data

5. Ampliaciones del MIDI


5.1. El tiempo en MIDI
Existen toda una serie de funciones de control sobre el tiempo, y de sincronizacion de los relojes de los
dispositivos conectados a una cadena MIDI.
Por un lado existe el mensaje de reloj de sistema o metronomo (F7h). Es un mensaje de tiempo real que, si se
envia, se hace con una candencia continua de 24 veces cada cuarto de nota negra (o pulsacion). Si variamos el
tempo, se varia dicha candencia.

Tambien tenemos el mensaje de puntero de cancion (F2h). Es un mensaje comun de sistema que indica la
posicion dentro de la cancion. Dicha posicion, que se viene indicada en dos bytes de datos, es un numero que se
incrementa cada 6 tics de reloj y, por tanto, si los tics de reloj eran 24 por negra, cada 16 unidades
incrementadas del puntero corresponden a una nota negra. Una cancion que utilice el puntero de cancion podria
tener una duracion maxima de 1024 tiempos (negras).
Tanto el reloj como el puntero de cancion son utiles para controlar y sincronizar elementos MIDI que tengan
que adaptarse al tempo del resto del sistema como un arpegiador o una linia de bajo o percusion.
Paralelamente, tenemos el mensaje de trama temporal MIDI o MIDI Time Code (F1h). Es un mensaje
comun de sistema que determina la posicion actual en la cancion pero utilizando una codificacion SMPTE
(Society of Motion Picture and Television Engineers).
La codificacion SMPTE es un estandard comercial de codificacion del tiempo en dispositivos no musicales. La
utilizaremos para controlar cintas de audio, aparatos de video y otros aparatos que no entienden lo que es un
compas, una nota o el tempo. SMPTE establece una subdivision temporal en horas, minutos, segundos y
frames. El numero de frames por segundo se especifica segun el formato SMPTE usado.
Formato SMPTE Frames/segundo
Usado en
0
24
Cine
1
25
Video Europeo (Sistema PAL)
2
30 (non drop)
Audio
3
29,97 (30 drop) Video USA (Sistema NTSC)
NOTA: El formato 3 de SMPTE es un poco mas complejo que los otros, pues no se trata de un numero entero
de frames por segundo. Lo que se hace es contar 30 frames pero colarnos (drop) los dos primeros frames de
cada minuto excepto si el minuto es multiple de 10 que no nos saltamos ninguno. Esto da una media de 29.97
frames/minuto.
Para formar una trama MTC completa utilizamos de 8 mensajes MTC (F1h). Se envia una trama completa cada
dos frames, por tanto, un mensaje cada cuarto de frame. El byte de datos del mensaje MTC tiene el formato
0nnnxxxx donde:
nnn
Significado de xxxx
0 4 bits bajos de Frames
1 4 bits altos de Frames
2 4 bits bajos de Segundos
3 4 bits altos de Segundos
4 4 bits bajos de Minutos
5 4 bits altos de Minutos
6 4 bits bajos de Horas
7 Bit alto de Horas y Formato SMPTE utilizado
Vemos que necesitamos los ocho mensajes para codificar una posicion SMPTE. Si el MTC va hacia adelante,
los mensajes se envian de 0 a 7. Si va hacia atras, los mensajes se envian en orden inverso. Se supone que los
dos frames ocurren exactamente en el mensaje 0 y 4.
Tambien se puede especificar rapidamente el MTC con un solo mensaje SysEx Universal RealTime. Esto tiene
la aplicacion de hacer saltar rapidamente hacia atras o hacia adelante a un dispositivo.
Mensaje de especificacion rapida de MTC
0xF0
0x7F
[dd]

Byte de estado (SysEx)


Fabricante: Universal Real Time
Identificador de dispositivo destino (0x7F para Broadcast)

0x01
0x01
[hr]
[mn]
[se]
[fr]
0xF7

Protocolo: MIDI Time Code


Mensaje: Full Time Code Message
Horas y Formato SMPTE
Minutos
Segundos
Frames
Fin de SysEx

Tambien se pueden especificar bits de usuario de SMPTE. Algunos dispositivos SMPTE los utilizan para
propositos propios. En principio, estan pensados para almacenar 8 digitos decimales que podrian tener el
contador de vueltas en una cinta, por ejemplo.
Mensaje de especificacion de bits de usuario
0xF0
0x7F
[dd]
0x01
0x02
[u1]
[u2]
[u3]
[u4]
[u5]
[u6]
[u7]
[u8]
[u9]
0xF7

Byte de estado (SysEx)


Fabricante: Universal Real Time
Identificador de dispositivo destino (0x7F para Broadcast)
Protocolo: MIDI Time Code
Mensaje: MIDI Time Code User Bits
0000aaaa
0000bbbb
0000cccc
0000dddd
0000eeee
0000ffff
0000gggg
0000hhhh
000000ii
Fin de SysEx

Los bits 'i' son Flags y los otros son datos que estan pensados para representar digitos decimales por eso los
cuatro bits de arriba estan a 0: para representar un digito decimal de 0 a 9 solo hace falta 4 bits.

5.2. Sample Dump Standard


La extension SDS del MIDI esta pensada para que los dispositivos MIDI se intercanvien samples entre ellos
cuando no tienen otra forma mas rapida de hacerlo, por que no hay una interficie adecuada como podria ser un
interface SCSI.
SDS No esta pensada para usarse en medio de una interpretacion pues ocupa mucho del ancho de banda. SDS
esta pensado pues, para usarse en el momento anterior a dicha representacion, o mediante un puerto MIDI
alternativo.
La utilidad mas directa del volcado de samples, es aprovechar la memoria de un ordenador o de un dispositivo
de almacenage independiente para que un instrumento, normalmente un sampler, pueda ampliar su banco de
instrumentos mas alla de su propia memoria.
SDS, en conjuncion con los Standard MIDI Files, tambien sirve de estandar de almacenamiento de samples.
Tambien da la posibilidad de editar dichos instrumentos con un software adecuado.
SDS define protocolos para acordar el envio entre los dos extremos o bien enviarlo abiertamente sin ningun tipo
de acuerdo previo a toda la cadena MIDI.

5.3. MIDI General Information


Esta extension sirve para obtener una serie de informacion sobre los dispositivos conectados a la cadena MIDI.
Se basa en dos mensajes exclusivos de sistemas universales (no propietarios):
Device Identity Request Message:

0xF0
0x7E
[dd]
0x06
0x01
0xF7

Byte de estado (SysEx)


Fabricante: Universal Non-Real Time
Identificador de dispositivo destino (0x7F para Broadcast)
Protocolo: General Information
Mensaje: Requerimiento de Identidad
Fin de SysEx

Device Identity Reply Message:


0xF0
0x7E
[dd]
0x06
0x02
[id]
[fl]
[fm]
[ml]
[mm]
[ver]
0xF7

Byte de estado (SysEx)


Fabricante: Universal Non-Real Time
Identificador de dispositivo destino (0x7F para Broadcast)
Protocolo: General Information
Mensaje: Respuesta de Requerimiento de Identidad
Identificador de Fabricante (1 o 3 Bytes)
Codigo de Familia del dispositivo (LSB)
Codigo de Familia del dispositivo (MSB)
Codigo de Miembro de la familia (LSB)
Codigo de Miembro de la familia (MSB)
Version del Software (4 Bytes)
Fin de SysEx

Duda: En que se basan los device id de los SysEx.

5.4. MIDI Tuning Standard


Esta extension permite acceder a la afinacion de cada una de las voces de cada programa de un dispositivo
MIDI. Una tabla de afinacion consiste en una lista de valores de afinacion para cada voz MIDI de un programa.
La afinacion de cada voz se codifica con 3 bytes. Como son bytes de datos (7 bits utiles) tenemos un margen de
21 bits por nota. El primero de los 3 bytes indica la nota por encima de la que se afina, los dos bytes siguientes
son un numero positivo que subdividen el intervalo entre esa nota y el siguiente semitono mas agudo en 214
divisiones. Tenemos una precision tal que se nos permite ajustar la afinacion 0'006125 centesimas de semitono.
Mensage de requerimiento de volcado de las tablas de afinacion:
0xF0
0x7E
[dd]
0x08
0x00
[pp]
0xF7

Byte de estado (SysEx)


Fabricante: Universal Non-Real Time
Identificador de dispositivo destino (0x7F para Broadcast)
Protocolo: MIDI Tuning Standard
Mensaje: Bulk Dump Request
Numero de programa que se quiere afinar
Fin de SysEx

Mensaje de volcado de tablas de afinacion:


0xF0
0x7E
[dd]
0x08
0x01
[pp]
[name]
[data]
[cc]
0xF7

Byte de estado (SysEx)


Fabricante: Universal Non-Real Time
Identificador de dispositivo destino (0x7F para Broadcast)
Protocolo: MIDI Tuning Standard
Mensaje: Bulk Dump
Numero de programa que se quiere afinar
Nombre del programa (16 caracteres ASCII no extendidos)
Datos de la tabla de afinacion
(128 notas * 3 bytes) [Tono Base]-[Parte alta]-[Parte baja]
Checksum
Fin de SysEx

Este mensaje se puede utilizar tanto para extraerlas como para cambiarlas dependiendo de quien lo envie.
El valor de Checksum se calcula haciendo la XOR de todos los bytes de datos hasta antes del propio checksum.
Mensaje de cambio de afinacion de voces concretas:

0xF0
0x7F
[dd]
0x08
0x02
[pp]
[nn]
[data]
0xF7

Byte de estado (SysEx)


Fabricante: Universal Real Time
Identificador de dispositivo destino (0x7F para Broadcast)
Protocolo: MIDI Tuning Standard
Mensaje: Note Change
Numero de programa que se quiere afinar
Numero de Notas a cambiar
Datos de la tabla de afinacion (+ voz a la que pertenecen)
(nn notas * 4 bytes) [Voz]-[Tono Base]-[Parte alta]-[Parte baja]
Fin de SysEx

Hay que tener en cuenta que en este mensaje es necesario indicar la voz a la que pertenece cada dato de
afinacion. En los mensajes de volcado no era necesario pues se enviaba toda la tabla ordenada.

5.5. Otras ampliaciones MIDI


Notation Information
Los mensajes de notacion informan, en tiempo real, de las claves, las armaduras, las linias de compas... Su
aplicacion es clara: la representacion grafica de partituras.
Utiliza el protocolo SysEx Universal RealTime 03h. Los dos siguientes mensajes cambian el tipo de compas. El
mensaje asincrono lo hace en el momento de recepcion y el otro se espera a que acabe el compas actual.
Cambio asincrono de tipo de compas:
0xF0
Byte de estado (SysEx)
0x7F
Fabricante: Universal Real Time
[dd]
Identificador de dispositivo destino (0x7F para Broadcast)
0x03
Protocolo: Notation Information
0x02
Mensaje: Asyncron Signature Change
[ln]
Numero de Bytes que siguen (3 si no es una clave compuesta)
[nn]
Numerador de la clave
[dd]
Denominador de la clave sera la potencia de dos: 2dd
[qq]
Numero de 1/32 de nota notada en un cuarto de nota MIDI.
[parejas nn dd] Opcional para las compuestas
0xF7
Fin de SysEx

Cambio sincrono de tipo de compas:


0xF0
Byte de estado (SysEx)
0x7E
Fabricante: Universal Real Time
[dd]
Identificador de dispositivo destino (0x7F para Broadcast)
0x03
Protocolo: Notation Information
0x42
Mensaje: Syncron Signature Change
[ln]
Numero de Bytes que siguen (3 si no es una clave compuesta)
[nn]
Numerador de la clave
[dd]
Denominador de la clave sera la potencia de dos: 2dd
[qq]
Numero de 1/32 de nota notada en un cuarto de nota MIDI.
[parejas nn dd] Opcional para las compuestas
0xF7
Fin de SysEx

Barra de fin de compas:


0xF0
0x7F
[dd]
0x03
0x01
[lb]
[mb]
0xF7

Byte de estado (SysEx)


Fabricante: Universal Real Time
Identificador de dispositivo destino (0x7F para Broadcast)
Protocolo: Notation Information
Mensaje: Bar Marker
Numero de barra (LSB)
Numero de barra (MSB)
Fin de SysEx

El numero de barra es un entero con signo. Si es 0 o negativo implica


lb mb is the desired bar number, with the LSB first (ie, Intel order). This is a signed 14-bit value (low 7 bits are
in lb, right-justified, and bits 8 to 14 are in mb, right-justified). Zero and negative numbers up to -8,190 indicate
count off measures. For example, a value of -1 (ie, lb mb = 7F 7F) means that there is a one measure
introduction. A value of zero would indicate no count off. Positive values indicate measures of the piece. The
first measure is bar 1 (ie, lb mb = 01 00). A maximum neg number (lb mb = 00 40) indicates "stopped play"
condition. A maximum positive value (lb mb = 7E 3F) indicates running condition, but no idea about measure
number. This would be used by a device wishing to mark the passage of measures without keeping track of the
actual measure number.
Real Time Cueing
Los 'cue' son puntos de interes que se insertan en la representacion. Los cues se colocan en diversos puntos a lo
largo del tiempo, por lo que van de la mano del MIDI Time Code. Consiste en un conjunto de 14 mensajes que
permiten posicionarlos para cualquer dispositivo compatible.
Utiliza el protocolo SysEx Universal RealTime 05h.
MIDI File Dumps
Es una extension del protocolo que estandariza la forma de transmitir ficheros via MIDI. Las aplicaciones mas
directa son la transmision de ficheros MIDI, samples en formato propietario (no compatible con SDS) o
cualquier tipo de informacion de configuracion. Cada fabricante implementaba su forma de hacerlo por lo que
se establecio, finalmente, este estandard.
Utiliza el protocolo SysEx Universal Non-RealTime 07h.
MIDI Show Control
Esta extension pretende dar herramientas para controlar, de una forma estandard, equipo, que pese a no ser
musical, forme parte de una representacion: Luces, fuegos artificiales, aparatos de video, maquinaria de
escenario...
Utiliza el protocolo SysEx Universal RealTime 02h.
MIDI Machine Control
Es un protocolo de mensajes exclusivos de sistema universales para controlar sistemas de produccion
multimedia. Tiene bastantes vias de expansion futura, aunque actualmente solo estandariza como controlar
sistemas de audio y video.
Utiliza los protocolos SysEx Universal RealTime 06h (comandos) y SysEx Universal RealTime 07h
(respuestas).

Bibliografia, Links y Referencias.


Este manual es una transcripcion ampliada de los apuntes que recogi de las siguientes fuentes:

MIDI avanzado. Guia del usuario. R.A.Penfold


Ed.Ra-Ma
PCMANIA Numeros 35-47
PC Games Programmer Encyclopedy
MIDI Manufacturers Association
MIDI Technical Fanatic's Brainwashing Center

Los amantes de la aventura encontraran mas informacion en:

MIDI Systems and Control Francis Rumsey


1990 Focal Press
MIDI and Sound Book for the Atari ST Bernd Enders and Wolfgang Klemme
1989 M&T Publishing, Inc.
X-MIDI Homepage
Para obtener las especificaciones MIDI (formato de ficheros, protocolo...) envia un e-mail con la frase
Get midispec package a listserv@auvm.american.edu.

Manual realizado por David Garca Garzn (Vokimon)

S-ar putea să vă placă și