Arduino MIDI

Buenas, stoy intentando convertir los datos serie q me envia arduino por el puerto USB a datos MIDI para conectar a Ableton, pero no encuentro forma para hacerlo. He encontrao un conversor de serie a midi llamado S2MIDI, de memeteam, con web TransIP - Reserved domain

pero cuando mapeo los puertos con el ableton para assignar notas midi, ableton me detecta como mil notas cada vez, nose si es cosa de arduino, q lo dudo porque sino se encenderia un led q tengo puesto, por lo q seguramente es cosa del convertidor de datos, alguien tiene idea de algun software q lo haga????

muchas gracias

mira la pagina que acabo de encontrar.... estoy flipando...

http://carl.kenner.googlepages.com/glovepie

Indeed, the software developed by Carl Kenner has the role of converting any type of signal (from a mouse, Joystick, a P5 glove) into another signal (MIDI, variables...) using a simple scripting language and/or a GUI.

saludos y suerte :slight_smile:

Puede que te sirva http://docs.monome.org/doku.php?id=app:monomeserial es una aplicacion que usa el monome para convertir datos serie en midi o tambien osc... yo no lo he probado pero creo que puede funcionar

Hola,

Échale un vistazo a esto por si te sirve: http://www.interactivos.org/electronica/

Hay una presentación sobre cómo utilizar Arduino + MIDI y un código de ejemplo.

Es de un taller que acabamos de dar en Madrid.

Salu2,

Igor

Ante todo muchas gracias a Igor por la inestimable fuente de ayuda que pueden ser manuales bien redactados y explicados de un modo sencillo y eficiente, porque incluso los que tenemos conocimientos, entre los que me incluyo, a veces sentimos perder la frialdad, que podemos a priori tener, cuando las cosas parecen no funcionar.

El tutorial sobre midi y arduino es tan sencillo de que funcione como de que no. Instale el driver de roland y xp lo reconocía pero no dejaba entrar en sus propiedades de configuración para ordenarle porque puerto –el mismo que el FTDI de arduino- debía leer. Con esto cualquiera puede pensar que estamos perdidos porque roland sólo tiene un driver serie, el resto de la página son del controlador de teclado que no nos valen.
Pueden existir más drivers, de Alesis por ejemplo, pero habiendo alguien testeado los resultados, óptimos, con este driver conviene agarrarse a él como fuera.
Desisntalo el driver, y también el midiyoke, midikent –en xp-, y Logic Audio recupera su buen funcionamiento –porque el midiykent crea un feedback que anula la funcionalidad del programa- y vuelvo a instalar el driver de roland. Ahora si que lo coje y en la misma instalación le indico el puerto por el que debe escuchar a Arduino.
Abro Logia, cargo un VST, por ejemplo Predator, Blue, AudioBassline, Hypersonic, y el solito, sin que yo le diga nada, comienza a soltar notas. Sin hacer nada, con el circuito de la LDR que pone los datos en el puerto serie.
Funciona. En los hilos en inglés la gente empieza a tener problemas del tipo películas de Boollywood, pero aquí ha ido todo bien.
XP Profesional 2002 SP2 y Logia 5.5
Tengo conectado un teclado controlador y puedo controlar parámetros del mismo VST que está sonando con los datos de la LDR. Grande!

El código del manual en pdf de Igor incluye el cálculo de la tecla que suena, yo le he añadido el del control CC generado a partir de lo que toma la LDR.

int ldrPin = 3; // Entrada analógica

void setup() {

Serial. begin( 38400 );
}

byte note, vel, ldr ;
int dur;

void loop() {

// Leer el sensor
ldr = analogRead( ldrPin);
if ( ldr > 65 ) {
// Nota y velocidad (fuerza)

vel = random (0,127); //volumen de la nota, a 100 por defecto
note = 32 + ldr / 16; // calcular la nota
dur = random( 50, 500); // duración aleatoria entre 50 y 500

// Pulsar tecla
printByte( 144); // Note- on
printByte( note); // Nota
printByte( vel); // Velocidad
delay( dur); // espero un poco, se puede poner un valor fijo como 1”

// Soltar tecla
printByte( 144); // Note- on
printByte( note); // Nota
printByte( 0); // Velocidad cero

// Rotar potenciómetro, pedal?
printByte( 176); // para los CC, knobs, modulación?
printByte( 73); // Nota
printByte( note); // Velocidad
delay( dur); // espero un poco, se puede poner un valor fijo como 1”

// Soltar potenciómetro, pedal?
printByte( 176); // Note- on
printByte( note); // Nota
printByte( 0); // Velocidad cero

}
}

Ahora surgen preguntas:
¿Se puede usar más de un sensor para un VST diferente? Entonces habrá que usar canales midi diferentes. Una LDR en el 1 a VST1 y un sensor PIR de ultrasonidos por el 2 al VST2, para tener sensores en lugares diferentes controlando varias cosas y no limitarse a un solo sonido cambiante.
Se controla la nota con 144 y el ControlChange -CC- con 176 pero el canal como de indica, he mirado un manual de MIDI por USB de un hilo en inglés y no he visto nada. Según el primer post, alguien usaba como driver serial el S2MIDI. En esa página, TransIP - Reserved domain, en la descarga del plugin se incluyen 3 ejemplos en arduino. al abrir uno, el multidrum, veo que emplean lo que en el pdf de Igor también se hace, el envío de la nota, y el CC que he añadido, pero ellos también emplean una sentencia:
controlChange(midiChannel,10,reading), donde especifican el canal midi, que es la historia de este párrafo. O sea que se puede, pero habrá que averiguar como el driver de roland entiende esto.
Que la gente vaya experimentando y comentamos las experiencias para que todos aprendamos algo. Un saludo.

Por cierto, ¿alguien sabe como usar el serial monitor para ver los datos que se envían? En Logia lo veo, pero en Arduino no se cómo.

Hay otro tutorial para escolares en esta dirección:
http://www.iua.upf.es/~jlozano/interfaces/interfaces7.html
En el se ve que el cambio de programa se realiza con el BYTE 192

Hola,

El tutorial de MIDI trata de ser muy sencillo para que la gente pueda dar sus primeros pasos. Se situa en la parte final del taller ... la gente ya sabe un poco de Arduino y utiliza los ejemplos del día anterior para usar MIDI. Así que lo ideal es seguirlo en secuencia, una vez que se tienen conocimientos básicos de Arduino.

Lo ha hecho Yago Torroja (es justo comentarlo), que ha diseñado varios dispositivos musicales basados en Arduino y MIDI. Un ejemplo: Dorkbot MADRID "Gente que hace cosas raras con electricidad"

El driver de Roland no es una maravilla, estoy de acuerdo, pero es de lo poco que hay y que sepamos que funcione. A mi también me ha dado problemas en algún PC y en otros a la primera ... ¿porqué? ... ni idea. :cry:

Muchas gracias por el código y por la info que has mandado. :slight_smile:

Yo no he probado lo de usar varios canales ... hago cosas más sencillas ... pero le preguntaré a Yago y os diré lo que me cuente.

Con respecto a lo que preguntas ... en Arduino es difícil seguir mediante el monitor serie los comandos MIDI ya que se envían como bytes y son ilegibles (a no ser que seas como los de The Matrix :wink: ). Te recomiendo que uses el MIDIMON (MIDI Monitor) está muy bien para lo que quieres hacer. Pregúntale a San Google para que te diga de donde descargarlo.

Salu2,

Igor

Hola,

Ahora surgen preguntas:
¿Se puede usar más de un sensor para un VST diferente? Entonces habrá que usar canales midi diferentes. Una LDR en el 1 a VST1 y un sensor PIR de ultrasonidos por el 2 al VST2, para tener sensores en lugares diferentes controlando varias cosas y no limitarse a un solo sonido cambiante.
Se controla la nota con 144 y el ControlChange -CC- con 176 pero el canal como de indica, he mirado un manual de MIDI por USB de un hilo en inglés y no he visto nada. Según el primer post, alguien usaba como driver serial el S2MIDI. En esa página, http://www.memeteam.net/2007/s2midi/, en la descarga del plugin se incluyen 3 ejemplos en arduino. al abrir uno, el multidrum, veo que emplean lo que en el pdf de Igor también se hace, el envío de la nota, y el CC que he añadido, pero ellos también emplean una sentencia:
controlChange(midiChannel,10,reading), donde especifican el canal midi, que es la historia de este párrafo. O sea que se puede, pero habrá que averiguar como el driver de roland entiende esto.
Que la gente vaya experimentando y comentamos las experiencias para que todos aprendamos algo. Un saludo.

Respondiendo rápidamente, sí, se pueden enviar datos por varios canale MIDI distintos para que los recojan distintos plugins VST. Sin enrollarme demasiado, si quieres enviar una nota por un canal MIDI, el código de NOTE ON es 144 + el número del canal (siendo un 0 para el canal 1, un 1 para el canal 2, un 2 para el canal 3 y así sucesivamente). Osea, que si quieres enviar un NOTE ON por el canal 3 tendrás que poner un 146.

(Nota: En el pdf del taller de al que te refieres, los códigos MIDI estaban en decimal para facilitar la comprensión, pero si lees cualquier página sobre MIDI verás que los códigos MIDI suelen ponerse en binario porque así se entiende mejor la utilidad de cada campo. En concreto, el comando NOTE ON en binario es 1001cccc donde cccc indica el número de canal. Así, para el ejemplo anterior, un NOTE ON por el canal 3 sería 10010010, que en en hexadecimal es 0x92, y en decimal 146.)

De igual manera, el código de CONTROL CHANGE sería 176 + número de canal (osea que para el canal 3, sería 178).

Espero que te valga.

Saludos

Muchas gracias Yago. ;D

Salu2,

Igor