4. MiDispositivoMidi: Arduino y MIDI

¿Qué es Arduino?
Como se puede encontrar en su sitio web "Arduino es una plataforma electrónica de código abierto basado en hardware y software fácil de usar. Está dirigido a cualquier persona que hace proyectos interactivos "
Básicamente, Arduino es un controlador de micro que puede ser programado para interactuar con el medio ambiente por medio de sensores y actuadores. Un sensor puede ser un botón y un actuador un LED. Dada una entrada (es decir, el botón empujado) Arduino puede procesar los datos y dar una salida que usted tiene con el programa (es decir, si se presiona el botón, el LED tiene que ilumina). Este es el ejemplo básico y se puede encontrar más ejemplos simples en Internet.
El Arduino más común es la versión UNO. Los precios actuales de las juntas Arduino UNO corren alrededor de 20 € y las de "clones" relacionados tan bajo como 7 €. Cuenta con 14 entradas digitales / pines Salidas y 6 entradas analógicas.

Nos centraremos en Arduino y MIDI con el fin de entender cómo funciona MiDispositivoMidi. En primer lugar vamos a dar un poco de información general y luego vamos a explicar cómo "enviar" MIDI con nuestro Arduino. Fresco, ¿no?
¿Qué es MIDI?
Busca MIDI en Internet podrá encontrar una gran cantidad de información, pero lo voy a hacer una pequeña explicación. MIDI (Musical Instrument Digital Interface) es un estándar que describe un interfaz y conectores que permiten instrumentos, equipos y dispositivos electrónicos musicales para comunicarse uno con el otro digital de protocolo. Se utiliza principalmente en la música, sino que también se utiliza en otras áreas (es decir, usted puede controlar servos o focos utilizando midi). Es importante decir que midi no suena por sí mismo, que es sólo un protocolo. Un sintetizador puede interpretar el mensaje midi y darle un sonido, pero el sonido es interpretado por el sintetizador.
¿Dónde puedo encontrar MIDI?
Estos son dos ejemplos de dispositivos que funcionan con midi. Como he dicho no suena por sí mismo. Si se conecta a uno de estos dispositivos en el equipo y asignar a cada mensaje de sonido midi, cuando se presiona una tecla de su computadora interpretará que nota le pegas y reproducir un sonido determinado.


Mensajes MIDI (Echa un vistazo a este gran post)
Imaginemos que queremos tocar la batería con nuestro controlador midi. Vamos a utilizar el Akai LPD8 que tiene botones sensibles. Los primeros mensajes MIDI que imaginamos son evidentes, tenemos que enviar los cuales observamos que queremos jugar. ¿Forte o el piano? En el mensaje de nota activada midi también tenemos que enviar la intensidad (se llama velocidad). Después de un mensaje Note On es necesario enviar una nota de mensaje, diciéndole a nuestro equipo que esa nota ya no empujó.
Hay un montón de mensajes MIDI y están todos reunidos aquí. Es bastante difícil de leer y muy técnico.
http://www.midi.org/techspecs/midimessages.php
Nos va a centrarse en Nota On, Off Nota y Control Change.These somos los mensajes MIDI más utilizados, y con ellos podemos entender gran parte de protocolo midi.
Nota On. Este mensaje tiene 3 bytes.
Byte 1: Los 4 primeros bits significan el tipo de mensaje (Note On 1001). Los otros 4 bits son el número de canal. A partir de ahora vamos a utilizar el canal 1 (0000).
Byte 2: En primer lugar el bit 0 (no se puede cambiar). Los 7 bits restantes significan el valor de la nota. Puede ser G1, G #, ... A4 corresponde a 440 Hz y su 69 (100 101 en binario). Por número de nota y las relaciones de la nota aquí.
Byte 3: Primer bit 0 (no se puede cambiar). Hay 7 bits para enviar la intensidad de la nota (llamada velocidad). Indica la fuerza con que pulsa la tecla. Puede ser también un valor entre 0 un 127, debido a los 7 bits.

Imagen fundada aquí
Binario es demasiado largo, así que preferimos usar hexadecimal. Imaginemos que queremos enviar un mensaje NoteOn a través del primer canal con la nota A4 y con una velocidad de 123.
Byte 1: 1001 0000 (0000 significa el canal 1).
Byte 2: Mirando las tablas A4 corresponde a 69. Si expresamos 69 (decimal) en binario es 100101.
Byte 3: Velocity de 123 expresa en binario 1111011
Así que el mensaje es 10010000 0100101 01111011 y si nos hace grupos de 4 y el cambio a la base hexadecimal es:
0x90 0x45 0x7B
Note Off
Podemos enviar un mensaje Note On con una velocidad de 0. Es básicamente lo mismo que el envío de un mensaje de Note Off. Buscar en la Internet para obtener más información.
Cambio de control (CC)
Si nos torcemos una nuez de nuestro teclado o controlador midi, tenemos que enviar esa información a través de un mensaje CC. Es sencillo:
Byte 1: Utilizar el canal 1 el código de este mensaje es: 0xB0 (1011 0000)
Byte 2: Controlador. ¿Qué controlador queremos cambiar? Como en la Nota En el primer bit es 0 y el otro 7 tener la información de qué controlador.
Byte 3: Valor. Primero mordió es un 0 y el otro 7 tener la información del valor. Si el mando es un doce el valor será 64 (asumiendo que es una olla lineal).
Permite enviar un CC de la primera controlador (0000) bruja el valor 64. En hexadecimal será:
0xB0 0x00 0x40
Vamos a unirse a Arduino y midi
Podemos añadir un par de interruptores y un potenciómetro para nuestra placa Arduino y empezar a tener un poco de diversión. Arduino tiene que estar conectado a nuestro ordenador por USB (para cargar el código y dando suministro de corriente). También podemos enviar los datos a través de USB, y esto se llama Comunicación en serie. No es midi, es de serie por lo que necesitaremos un programa en nuestro ordenador para convertir nuestros mensajes de serie en formato midi. Una vez que hemos convertido nuestros mensajes, un DAW como Logic Pro Tools, Ableton Live, Nuendo o Cubase puede interpretar que los mensajes MIDI.
Necesitaremos:
-
Interruptores X02
-
X02 Pull Up resistencias (> 1k Ohm)
-
x01 potenciómetro
-
x01 Arduino UNO
-
Algunos de alambre
Cableado de los interruptores
Permite utilizar los pines digitales 2 y 3. No estamos utilizando 1 y 2, ya que se utilizan para RX y TX. Como podemos ver en este diagrama es bastante fácil de conectar.


Cableado del potenciómetro
Vamos a utilizar el A0 entrada analógica. El potenciómetro tiene 3 pines, el del medio tiene que estar conectado a A0 y 1 y 3 a GND un 5v. No hay problema si GND y 5v si cambió.


Vamos a ver si todo está conectado correctamente para copiar / pegar este código a su Arduino Sketch y compilar para su Arduino. Esto todavía no es midi.
-
const int buttonPin1 = 2; // the number of the pushbutton 1 pin
-
const int buttonPin2 = 3; // the number of the pushbutton 2 pin
-
-
int buttonState1 = 0; // variable for reading the pushbutton 1 status
-
int buttonState2 = 0; // variable for reading the pushbutton 2 status
-
int potValue=0; // variable for reading the potentiometer status
-
void setup() {
-
// initialize the pushbuttons pin as an input:
-
pinMode(buttonPin1, INPUT);
-
pinMode(buttonPin2, INPUT);
-
// initialize the serial communication
-
Serial.begin(115200);
-
}
-
-
void loop(){
-
// read the state of the pushbuttons and the pot
-
buttonState1 = digitalRead(buttonPin1);
-
buttonState2 = digitalRead(buttonPin2);
-
potValue=analogRead(A0);
-
// display the value read in the serial monitor
-
Serial.print("Switch 1 Value: ");
-
Serial.println(buttonState1);
-
Serial.print("Switch 2 Value: ");
-
Serial.println(buttonState2);
-
Serial.print("Pot Value: ");
-
Serial.println(potValue);
-
Serial.println("------------------");
-
// some delay to not spam all the screen
-
delay(400);
-
}

Vamos a abrir el Monitor de serie y ver si todo está bien. ATENCIÓN tienes que seleccionar 115200 como velocidad de transmisión.

Permite el uso midi!
Arduino no envía midi por sí mismo. La comunicación se llama Comunicación serie, por lo que tendrá que convertir mensajes de serie en los mensajes MIDI. Tendremos que instalar un par de programas, pero primero vamos a ver el código.
-
const int buttonPin1 = 2; // the number of the pushbutton 1 pin
-
const int buttonPin2 = 3; // the number of the pushbutton 2 pin
-
-
int buttonState1 = 0; // variable for reading the pushbutton 1 status
-
int buttonState2 = 0; // variable for reading the pushbutton 2 status
-
int potValue=0; // variable for reading the potentiometer status
-
-
int lastValueB1 = 0; // last value
-
int lastValueB2 = 0; // las value
-
int lastValuePot = 0; // last value
-
-
void setup() {
-
// initialize the pushbuttons pin as an input:
-
pinMode(buttonPin1, INPUT);
-
pinMode(buttonPin2, INPUT);
-
// initialize the serial comunication
-
Serial.begin(115200);
-
}
-
-
void loop(){
-
// read the state of the pushbuttons and the pot
-
buttonState1 = digitalRead(buttonPin1);
-
buttonState2 = digitalRead(buttonPin2);
-
potValue=floor(analogRead(A0)/8);
-
-
if(potValue!=lastValuePot){ // if the value has changed
-
sendControlChange(1,potValue); // send control change
-
}
-
if(buttonState1!=lastValueB1){ // if the value has changed
-
if(buttonState1==HIGH){ // if pushed
-
sendNoteOn(30,127); // note On
-
}else{
-
sendNoteOn(30,0); // if not note Off
-
}
-
}
-
-
if(buttonState2!=lastValueB2){
-
if(buttonState2==HIGH){
-
sendNoteOn(31,127);
-
}else{
-
sendNoteOn(31,0);
-
}
-
}
-
-
lastValueB1=buttonState1; // last value is actual value
-
lastValueB2=buttonState2;
-
lastValuePot=potValue;
-
}
-
-
void sendNoteOn(int note, int velocity) {
-
Serial.write(byte (0x90)); // note on code
-
Serial.write(byte (note));
-
Serial.write(byte (velocity));
-
}
-
-
void sendControlChange(int controler, int value){
-
Serial.write(0xB0); // control change code
-
Serial.write(byte (controler));
-
Serial.write(byte (value));
-
}


Vamos a explicar cómo convertir serie a midi. Una vez que tengamos los mensajes MIDI, un programa como Ableton Live, Logic, Nuendo o Cubase reconocerá que los mensajes MIDI y vamos a ser capaces de producir algún sonido y divertirse.
1. Instalación para Windows
MidiYoke: http://www.midiox.com/zip/MidiYokeSetup.msi. Puede tener problemas si se trabaja en Win7 u 8. Si es así, ejecutar como administrador el archivo de instalación y reiniciar el sistema después de la instalación. Deberia trabajar.
HariLess MidiSerial: http://projectgus.github.io/hairless-midiserial/
Por último, seleccione como puerto de salida MIDI "Out a MIDI Yoke 1", y como puerto serie de Arduino (COM 1, 2, ...)

2. Instalación para Mac
Primero usted tiene que asegurarse de que sus puertos MIDI internos se activan. Ir a "Audio y configuración MIDI", luego "Ventana" y "Mostrar ventana MIDI".


Compruebe que "dispositivo conectado" está marcada.

Descargar sin pelo Midi serie desde aquí: http://projectgus.github.io/hairless-midiserial/ y abierto. Como "Puerto serie", seleccione su Arduino (de su nombre puede cambiar, pero si se trata de un verdadero Arduino el nombre debe ser Arduino). Como "MIDI Out" seleccione un puerto "impulsor de IAC". Puede cambiar el nombre en la configuración midi explicó antes.

Compruebe que la configuración de su pelo es el siguiente. Estamos utilizando una velocidad de 115.200, por lo que en su código de Arduino debe utilizar "Serial.begin (115200)". Si no, nada funcionará.

Para demostrar lo que podemos hacer usaré Ableton Live. Siga estos pasos para configurar la comunicación Arduino-Ableton. Tenemos que decirle a Ableton cómo comunicarse con nuestro dispositiva midi. Haga clic en "Preferencias".

“Midi Sync” Tab

Ahora tenemos que activar "Track" y "remoto" de nuestro puerto midi (el que se seleccionaron en la serie midi sin pelo). En ventanas puede estar fuera de MidiYoke 1.

Ahora haga clic en "MIDI" (En la parte superior a la derecha) y seleccione un parámetro. Por ejemplo, importar un sonido como un lazo, y seleccione el botón de reproducción. Ahora pulse un botón de su controlador midi. Ableton debe reconocer ese botón y asignar a ese parámetro. También me asignaron el potenciómetro al valor de la frecuencia de un ecualizador.

