Solución MIDI con Arduino

Kaitain
#1 por Kaitain el 03/08/2010
Bueno, pues aquí os subo lo que hasta ahora ha sido mi proyecto más ambicioso, y en el que llevo trabajando los últimos meses.

Se trata de una caja con dos entradas y dos salidas MIDI, que se encarga de convertir los mensajes MIDI entrantes en los mensajes que cada aparato necesita.

Esto ha hecho mi vida, y la del resto de los componentes de mi banda muchísimo más fácil, ya que ahora podemos lanzar y quitar loops a tiempo real, grabar guitarras y sintes para lanzarlos luego, etc ... todo sincronizado, y conseguir un sonido bastante razonable siendo sólamente 3 personas. Y SIN ordenadores.

Resulta que toco con una multitud de aparatos cuyo control me traía por el camino de la amargura:

- Sintetizador Microkorg
- Line 6 POD
- Pedal de loops EHX 2880 (donde puedo loopear guitarra y sintes)
- Sampler SP555 (para lanazar bases y arreglos electrónicos)
- Pedalera FCB1010 de Behringer. Que es como el anillo único y sirve para controlarlos a todos.

Y a todo esto el batería del grupo toca con metrónomo (dado por una caja de ritmos) ya que usamos bases electrónicas la mayor parte del tiempo.

Un esquema de cómo está todo montado sería este (ya sabéis, yo y el Paint):
Archivos adjuntos ( para descargar)
ESQUEMA.JPG
Subir
OFERTAS Ver todas
  • -7%
    Modal Argon8 (B-Stock)
    559 €
    Ver oferta
  • -29%
    Behringer X-Touch Compact
    263 €
    Ver oferta
  • -50%
    NI Komplete 15 Collector's Edition
    885 €
    Ver oferta
Kaitain
#2 por Kaitain el 03/08/2010
Cada uno de estos aparatos es controlable vía MIDI. Y aquí fue cuando me dije, "date!, lo conectas todo a la pedalera y listo!" Pues no oye, la cosa no era tan fácil.

Y no lo era porque: PRIMERO, cada aparato tiene unas limitaciones concretas, en cuanto al tipo de mensajes que necesita recibir o que puede transmitir, y
SEGUNDO, aunque la pedalera FCB1010 es lo más cercano a la perfección que existe y los de Behringer debieran recibir una medalla por haberla fabricado, pues
no lo puede todo.

Una manera de solucionar esto es usar algo como: http://www.midisolutions.com/prodevp.htm

(La página es muy interesante. Venden multitud de soluciones MIDI: http://www.midisolutions.com/)

Este aparato no deja de ser una caja programable, donde tú, mediante un soft que te bajas de su web, decides las reglas que irán implementadas en el aparato. Parecido al Bome´s Midi Translator, pero en versión hardware. Lo malo es que, hablando con ellos, se me quedaba corto para todo lo que yo necesitaba. Te lo pueden modificar a medida, pero cada modificación es un dineral.

Así que desistí de esta gente y me planteé hacerlo yo, con Arduino. Para el que no lo conozca, puede visitar esta web y encontrará toda la info: http://www.arduino.cc/

Básicamente, es un módulo hardware con un microcontrolador programable. Todo abierto. Es el Linux pero en versión hardware, para que nos entendamos. Eso sí, para hacer algo con esto hay que pilotar un poco de programación.

La cuestión es que al final con esta "caja" (aka, y de ahora en adelante, ENGENDRO) he conseguido solucionar multitud de cosas:

- Poder cambiar de preset
, así como otros parámetros del POD, desde la pedalera.
- Sinronizar el POD. Necesario si quiero meter delays a tiempo, por ejemplo. Y cómo hacerlo si no reconoce la señal de MIDI CLOCK? Pues este trasto mío recibe el reloj desde la caja de ritmos, lleva la cuenta de las negras y manda al POD un mensaje de CC por cada negra (que es lo que el PDO entiende como TAP TEMPO).
- Mandar el reloj MIDI al pedal de loops, sincronizándolo con la caja de ritmos al añadir la posibilidad de mandar un mensaje de START, que es lo que necesita el 2880 para empezar la cuenta de las negras por compás.
- Transformar mensajes de Program Change por el canal del 2880 en mensajes de Control Change, y así poder controlar el Start/stop etc.. del pedal de loops desde la pedalera.
- Poder cambiar de preset en el Microkorg desde la pedalera.
- Mandar el reloj al Microkorg, necesario para sincronizar el arpegiador y el delay.
- Mandar los mensajes de Note On de la pedalera al Microkorg, necesario para poder tocar algunas notas desde la pedalera mietras toco la guitarra (sí, es muy bizarro, lo sé, pero si no me complicase no sería yo).
- Transformar mensajes de Program Change por el canal del microkorg en mensajes de Control Change, y así poder cambiar parámetros del sinte desde la pedalera.
- Transformar los mensajes de Program Change de la pedalera en mensajes de Note On para el sampler. De esa forma puedo lanzar samples desde la FCB1010. ¿Y
por qué no usar los mensajes de Note On de la pedalera, os preguntaréis? Pues porque sólo los manda por un canal (no como los de Program Change, que pueden ir hasta por 5 canales), y ese canal ya estaba ocupado para el Microkorg.

No se si se me olvida algo. La verdad es que según voy necesitando le voy añadiendo cosas.

Pero aún queda lo mejor, que conseguí implementar hace poco: resulta que el sampler SP555 no tiene posibilidad de lanzar o quitar loops a tiempo con el metrónomo, tal como haríamos en Ableton, por ejemplo, donde no importa que no le des a tiempo, que el sample salta al llegar la siguiente negra (o lo que tengas especificado en la rejilla de cuantización). La verdad es que un aparato hardware tirando a caro, como el SP555, no tenga esta opción, me parece absurdo, cuando es algo tan sumamente básico. Pero nada, es lo que hay.

Después de mucho probar e investigar, puedo decir que me ha costado un huevo, pero al final me he salido con la mía (y me siento especialmente orgulloso, oye). Básicamente se lanza el mensaje de Note On para el sampler desde la pedalera, y ENGENDRO retiene ese mensaje hasta que llega la siguiente negra. En ese momento lo lanza, y de esa forma todo va perfectamente sincronizado.

Al principio todo esto de la sincronía era algo que no me preocupaba mucho (ya que sobre todo lanzaba ambientes), pero ahora que usamos capas de bases electrónicas se hace necesario que todo vaya "clavado" al reloj. Y además, el batería puede permitirse lanzar el metrónomo al principio de cada tema sin preocuparse de nada más (antes no era así, antes yo lanzaba la base electónica y él tenía que cuadrar su metrónomo a mano, lo cual es mucho más engorro).

En fin, pues a esto es a lo que me dedico, ya ves tú. ENGENDRO, para el que le interese, está hecho con Arduino, en concreto con el modelo Mega, que era el único que traía más de un puerto serie (necesario para las entradas y salidas MIDI): http://arduino.cc/en/Main/ArduinoBoardMega

Además compré un par de plaquitas para los interfaces MIDI, en concreto éstas:
http://tomscarff.110mb.com/MIDI_IN_OUT_ ... rduino.htm

Por cierto, si estáis interesados en temas de MIDI y arduino, os recomiendo encarecidamente esta página, a mí me ha ayudado mucho: http://tomscarff.110mb.com/miduino/miduino.htm

Además le incorporé una plaquita con resistencias para los leds, que están ahí para indicar la actividad MIDI en las entradas y salidas, además de marcar las negras visualmente.

Esto en cuanto a hardware. Por supuesto el módulo Arduino hay que programarlo y eso es lo que me ha llevado la mayor parte del tiempo. Y lo que me queda.

Y bueno, esto es todo. Adjunto algunas fotillos para que veáis cómo ha quedado al final. Un saludo, gracias por leer el tocho y espero que esto le resulte útil a alguien. Recordad, no hay problema MIDI que Arduino no pueda solucionar! ;)

Saludos
Archivos adjuntos ( para descargar)
engendro 3.jpg
engendro 2.jpg
engendro 1.jpg
Subir
pacs
#3 por pacs el 03/08/2010
como se nota que tienes tiempo libre!!! :D ...a que te dedicaras...?

buen trabajo =D> . si es verdad que se puede hacer todo, mirame la manera de convertir reloj midi en pulsos para avanzar secuenciadores analogicos, anda... :mrgreen:

un abrazo!
Subir
Mudo
#4 por Mudo el 03/08/2010
...

Genial post Kaitain! Sube codigo y demás cuando puedas anda!

Acerca de lo que pides pacs...

te sirve un modulo midi cv?

http://befaco.ueuo.com/


;)


...
Subir
pacs
#5 por pacs el 03/08/2010
mudo, pues hombre...si me lo pones facil...la verdad es que si!!! =P~
Subir
Mudo
#6 por Mudo el 03/08/2010
...

Estos colegas (Diego de Leon y Jano) hacen talleres para la construcción de cada modulo y te ayudan en la elaboración de todo el proceso.

Por qué no les mandas un mail?
Fin del offtopic.


;)

...
Subir
Kaitain
#7 por Kaitain el 03/08/2010
Hombre pacs! Como te va, tío? Qué tal tu supersinte?

Pues lo que comentas se puede hacer con Arduino, claro, y además muy sencillo. Si te animas te echo una mano. El programilla debería ser algo como esto (así en plan rápido):

byte midiIn=0;
byte pinPulseOut=10;
byte pulseTime=1000;

void setup(){
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
Serial.begin(31250);
Serial.flush();
}


void loop(){
if (Serial.available() > 0) {
midiIn = Serial.read();
if (midiIn == 248) {
Serial.print(midiIn, BYTE);
digitalWrite(pinPulseOut, HIGH);
delay(pulseTime);
digitalWrite(pinPulseOut, LOW);
}
}
}

Así, en plan rápido. De todas formas ya te digo Paco, si te animas mándame un mail y lo vemos.

Oye Mudo, esta gente de befaco molan bastante. Dónde se realizan los talleres?

Chao!
Subir
Mudo
#8 por Mudo el 03/08/2010
...

Pues de momento en Hangar pero si hay quorum supongo que se puede hacer donde sea...

;)

...
Subir
SkaRudeboy
#9 por SkaRudeboy el 09/12/2010
Bueno el proyecto, quiero hacer uno, hay posibilidad de que me des mas detalles?,resistencias,detalles del pcb..etc..gracias de antemano
Subir
Kaitain
#10 por Kaitain el 16/12/2010
Hola, perdona que no te haya respondido antes, llevo un tiempo desconectado.

Pues te comento, los detalles los tienes todos en los links que he puesto arriba. Si tienes dudas concretas pregunta, pero antes échatelos un buen vistazo.

La pcb, bueno, es una stripboard normal y corriente. Las pistas ya vienen hechas, y para lo único que sirve es para poner resistencias en serie con los leds, y así limitar la corriente y que no se quemen. Me parece recordar que las puse de 180 ohmios, para que brillaran bastante. Están pinchadas en las salidas de arduino, configuradas como tales, digitales.

Y lo único que hay que hacer es ponerlas a nivel alto o bajo desde el programa, según quieras que luzcan o no. El lugar concreto donde están pinchadas da igual, lo importante es pincharlas en algún sitio y loego lo configuras desde el programa.

Pero vamos, si te vas a hacer uno, lo primero te recomiendo que te pienses muy bien lo que necesitas y lo que no, ya que es de lo que depende todo el diseño. Yo este trasto me lo he hecho adecuado a mis necesidades concretas, así que tal cual está dudo que le sirva a nadie más...

Saludos.
Subir
Hilos similares
Nuevo post

Regístrate o para poder postear en este hilo