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.
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.
Configuraciones típicas:
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 resolución 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 contínuo: 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.
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.
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.
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.
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
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.
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.
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.
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.
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.
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 |
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).
06 | Ajuste brusco del parametro (MSB) |
26 | Ajuste fino del parametro (LSB) |
60 | Decrementa el parametro en una cantidad |
61 | Incrementa el parametro en una cantidad |
62 | Indica un parametro no registrado a ajustar (LSB) |
63 | Indica un parametro no registrado a ajustar (MSB) |
64 | Indica un parametro registrado a ajustar (LSB) |
65 | Indica un parametro registrado a ajustar (MSB) |
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:
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.
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.
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 ceñimos 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.
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.
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...
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.
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 señal 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.
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.
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 diseñar 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.
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.
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.
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 pequeños procesadores exclusivamente al proceso MIDI.
General MIDI es un estandard, añadido 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:
Este sello, garantiza que un aparato cumple estas especificaciones.
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 | Percusion Cromatica | ||
---|---|---|---|
00 Acoustic Grand Piano
01 Bright Acoust. G.Piano 02 Electric Grand Piano 03 Honky-tonk Piano |
04 Rhodes Piano
05 Chorused Piano 06 Harpsichord 07 Clavinet |
08 Celesta
09 Glockenspiel 0A Music box 0B Vibraphone |
0C Marimba
0D Xylophone 0E Tubular Bells 0F Dulcimer |
Organos | Guitarra | ||
10 Hammond Organ
11 Percussive Organ 12 Rock Organ 13 Church Organ |
14 Reed Organ
15 Accordion 16 Harmonica 17 Tango Accordion |
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 | Cuerda | ||
20 Acoustic Bass
21 Electric Bass 1 22 Electric Bass 2 23 Fretless Bass |
24 Slap Bass 1
25 Slap Bass 2 26 Synth Bass 1 27 Synth Bass 2 |
28 Violin
29 Viola 2A Cello 2B Contrabass |
2C Tremolo Strings
2D Pizzicato StringS 2E Orchestral Harp 2F Timpani |
Ensemble | Metales | ||
30 String Ensemble1
31 String Ensemble2 32 SynthStrings 1 33 SynthStrings 2 |
34 Choir Aahs
35 Voice Oohs 36 Synth Voice 37 Orchestra Hit |
38 Trumpet
39 Trombone 3A Tubah 3B Muted Trumpet |
3C French Horn
3D Brass Section 3E Synth Brass 1 3F Synth Brass 2 |
Lenguetas | Tubos | ||
40 Soprano Sax
41 Alto Sax 42 Tenor Sax 43 Baritone Sax |
44 Oboeh18
45 English Horn 46 Bassoon 47 Clarinet |
48 Piccolo
49 Flute13 4A Recorder 4B Pan Flute |
4C Bottle Blow
4D Shakuhachi 4E Whistle 4F Ocarina |
Sintetizador solista | Sintetizador Acompañamiento | ||
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 |
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 |
Sintetizador Efectos | Etnicos | ||
60 FX 1 rain
61 FX 2 soundtrack 62 FX 3 crystal 63 FX 4 atmosphere |
64 FX 5 brightness
65 FX 6 goblins 66 FX 7 echoes 67 FX 8 sci-fi |
68 Sitar4
69 Banjo5 6A Shamisen 6B Kotoh7 |
6C Kalimba
6D Bagpipe 6E Fiddlet 6F Shanai0 |
Percusion | Efectos | ||
70 Tinkle Bell
71 Agogo13 72 Steel Drums 73 Woodblock |
74 Taiko Drum
75 Melodic Tom 76 Synth Drum 77 Reverse Cymbal |
78 Guitar FretNoise
79 Breath Noise 7A Seashore 7B Bird Tweet |
7C Telephone Ring
7D Helicopter 7E Applause 7F Gunshot |
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 |
Es necesario, como minimo que un dispositivo General MIDI reconozca los siguientes controles:
# Control | Descripcion | Comentarios |
1 | Modulation | usually hard-wired to control LFO amount, ie, vibrato), |
7 | Main Volume | |
10 | Pan | |
11 | Expression | |
64 | Sustain | |
121 | Reset All Controllers | |
123 | All Notes Off |
Lo que siguen son recomendaciones, no requisitos.
Parametros registrados MIDI
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 Byte de Estado (SysEX) 0x7E Fabricante: Universal Non-Real Time [dd] Identificador de dispositivo destino (0x7F para Broadcast) 0x09 Protocolo: General MIDI Message 0x01 Mensaje: General MIDI On 0xF7 Fin de SysEx
General MIDI Off:
0xF0 Byte de Estado (SysEX) 0x7E Fabricante: Universal Non-Real Time [dd] Identificador de dispositivo destino (0x7F para Broadcast) 0x09 Protocolo: General MIDI Message 0x02 Mensaje: General MIDI Off 0xF7 Fin de SysEx
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.
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.
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.
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.
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.
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 |
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 Byte de estado (SysEx) 0x7F Fabricante: Universal Real Time [dd] Identificador de dispositivo destino (0x7F para Broadcast) 0x01 Protocolo: MIDI Time Code 0x01 Mensaje: Full Time Code Message [hr] Horas y Formato SMPTE [mn] Minutos [se] Segundos [fr] Frames 0xF7 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 Byte de estado (SysEx) 0x7F Fabricante: Universal Real Time [dd] Identificador de dispositivo destino (0x7F para Broadcast) 0x01 Protocolo: MIDI Time Code 0x02 Mensaje: MIDI Time Code User Bits [u1] 0000aaaa [u2] 0000bbbb [u3] 0000cccc [u4] 0000dddd [u5] 0000eeee [u6] 0000ffff [u7] 0000gggg [u8] 0000hhhh [u9] 000000ii 0xF7 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.
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.
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 Byte de estado (SysEx) 0x7E Fabricante: Universal Non-Real Time [dd] Identificador de dispositivo destino (0x7F para Broadcast) 0x06 Protocolo: General Information 0x01 Mensaje: Requerimiento de Identidad 0xF7 Fin de SysEx
Device Identity Reply Message:
0xF0 Byte de estado (SysEx) 0x7E Fabricante: Universal Non-Real Time [dd] Identificador de dispositivo destino (0x7F para Broadcast) 0x06 Protocolo: General Information 0x02 Mensaje: Respuesta de Requerimiento de Identidad [id] Identificador de Fabricante (1 o 3 Bytes) [fl] Codigo de Familia del dispositivo (LSB) [fm] Codigo de Familia del dispositivo (MSB) [ml] Codigo de Miembro de la familia (LSB) [mm] Codigo de Miembro de la familia (MSB) [ver] Version del Software (4 Bytes) 0xF7 Fin de SysEx
Duda: En que se basan los device id de los SysEx.
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 Byte de estado (SysEx) 0x7E Fabricante: Universal Non-Real Time [dd] Identificador de dispositivo destino (0x7F para Broadcast) 0x08 Protocolo: MIDI Tuning Standard 0x00 Mensaje: Bulk Dump Request [pp] Numero de programa que se quiere afinar 0xF7 Fin de SysEx
Mensaje de volcado de tablas de afinacion:
0xF0 Byte de estado (SysEx) 0x7E Fabricante: Universal Non-Real Time [dd] Identificador de dispositivo destino (0x7F para Broadcast) 0x08 Protocolo: MIDI Tuning Standard 0x01 Mensaje: Bulk Dump [pp] Numero de programa que se quiere afinar [name] Nombre del programa (16 caracteres ASCII no extendidos) [data] Datos de la tabla de afinacion (128 notas * 3 bytes) [Tono Base]-[Parte alta]-[Parte baja] [cc] Checksum 0xF7 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 Byte de estado (SysEx) 0x7F Fabricante: Universal Real Time [dd] Identificador de dispositivo destino (0x7F para Broadcast) 0x08 Protocolo: MIDI Tuning Standard 0x02 Mensaje: Note Change [pp] Numero de programa que se quiere afinar [nn] Numero de Notas a cambiar [data] Datos de la tabla de afinacion (+ voz a la que pertenecen) (nn notas * 4 bytes) [Voz]-[Tono Base]-[Parte alta]-[Parte baja] 0xF7 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.
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 Byte de estado (SysEx) 0x7F Fabricante: Universal Real Time [dd] Identificador de dispositivo destino (0x7F para Broadcast) 0x03 Protocolo: Notation Information 0x01 Mensaje: Bar Marker [lb] Numero de barra (LSB) [mb] Numero de barra (MSB) 0xF7 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).
Este manual es una transcripcion ampliada de los apuntes que recogi de las siguientes fuentes:
Los amantes de la aventura encontraran mas informacion en:
Manual realizado por David García Garzón (Vokimon)