Tutorial: Usa MIDI para Controlar Tu Entorno
MIDI (Musical Instrument Digital Interface) is a protocol (with electrical connectors and a digital interface) that allows digital tools and electronic devices (virtual and physical) to communicate with each other. MIDI is usually used as a music sequencer. Originally, this format was created in the 80s as a way for instruments to communicate with each other, but since then, it has evolved into a highly organized specification that is heavily tested and adopted for a multitude of purposes.
Creamos una clase MIDI (con la ayuda de un miembro de la comunidad, Brainstormer) que puede usarse para controlar tu entorno en Overte. Por ejemplo, usamos MIDI para controlar la iluminación en un dominio durante un espectáculo musical.
Nota
Actualmente, solo se admite la clase MIDI en Windows.
Fundamentos de la clase MIDI
Nuestra clase MIDI funciona enviando un DWORD (palabra doble), un tipo de dato específico de Microsoft Windows, como mensaje. Es una unidad de datos sin signo de 32 bits y puede contener un valor entero que va de 0 a 4,294,967,295.
Cada vez que mueves una palanca, giras un control, presionas/liberas una tecla o tocas un pad, estás generando un mensaje MIDI que indica qué canal, qué nota, qué velocidad y cuál es el estado/comando a ejecutar.
Cada byte de este mensaje describe el valor de un tipo diferente.
00000000 |
0vvvvvvv |
0nnnnnnn |
1sss |
cccc |
Donde:
v = velocidad
n = notas
s = estado
c = canal
El número en el bit de orden superior (el primer número) indica si se trata de un comando (1) o de datos (0). El resto de los números determinan el valor del tipo. Esto significa que la velocidad y la nota pueden representar 128 valores únicos (1+2+4+8+16+32+64), el estado puede representar 8 valores únicos y el canal puede representar 16 valores.
Los diferentes tipos de estado que admitimos son:
Estado |
Tipos |
|---|---|
08 |
nota desactivada |
09 |
nota activada |
10 |
presión de tecla polifónica |
11 |
control de cambios |
12 |
cambio de programa |
13 |
presión de canal |
14 |
inflexión de tono |
15 |
mensaje del sistema |
Conectar tu Dispositivo de Control
Puedes conectar un dispositivo de control real que uses para manejar tu entorno en Overte, o crear uno virtual que te ayude a conectarte con otros dispositivos virtuales.
Conectar Ableton Live a la Interfaz
Para conectar Ableton Live directamente al cliente de Interfaz de Overte, recomendamos las siguientes herramientas virtuales:
Conectar un iPad o iPhone a la Interfaz
Puedes usar tu iPad o iPhone como un controlador táctil con botones, perillas y controles deslizantes. Lee las secciones Configura tu Dispositivo MIDI y Ejemplo: Cambiar el Color de un Cubo usando MIDI antes de leer estas instrucciones.
Descarga nuestra aplicación recomendada touchosc.
Descarga el puente para Windows.
Configura la conexión ya sea por USB o a través de tu red WIFI local en el menú de configuración.
Si configuras tu onEventReceived para registrar los mensajes entrantes, podrás ver qué perillas envían qué información, la cual puedes usar para llamar funciones personalizadas.
¡También hay componentes interesantes como el acelerómetro que puedes utilizar!
Configura tu Dispositivo MIDI
Una vez que hayas configurado tu Dispositivo Controlador MIDI, necesitas configurarlo.
Aquí tienes una función de configuración MIDI general recomendada que puedes ejecutar en un script. Con ella, puedes ver una lista de los dispositivos MIDI actualmente conectados:
// Some helpful constants const INPUT = false; const OUTPUT = true; const ENABLE = true; const DISABLE = false; function midiConfig(){ Midi.thruModeEnable(DISABLE ); Midi.broadcastEnable(DISABLE ); Midi.typeNoteOffEnable(ENABLE ); Midi.typeNoteOnEnable(ENABLE ); Midi.typePolyKeyPressureEnable(DISABLE); Midi.typeControlChangeEnable(ENABLE); Midi.typeProgramChangeEnable(ENABLE); Midi.typeChanPressureEnable(DISABLE); Midi.typePitchBendEnable(ENABLE ); Midi.typeSystemMessageEnable(DISABLE); // get a list of the available in and out device IDs midiInDeviceList = Midi.listDevices(INPUT); midiOutDeviceList = Midi.listDevices(OUTPUT); print(JSON.stringify(midiInDeviceList)); print(JSON.stringify(midiOutDeviceList));
Después de ejecutar la función de configuración, querrás conectarte a
midiMessages:Midi.midiMessage.connect(onEventReceived); // Your message handler will look like the following: /// @param {int} device: device number /// @param {int} channel: channel number /// @param {int} type: 0x8 is noteoff, 0x9 is noteon (if velocity=0, noteoff), etc /// @param {int} note: MIDI note number /// @param {int} velocity: note velocity (0 means noteoff) function onEventReceived(eventData){ // functions you run in response to different MIDI events }
Ejemplo: Cambiar el Color de un Cubo usando MIDI
Vamos a cambiar el color de una entidad tipo cubo en Overte usando MIDI.
Usa este método para transformar el rango MIDI de
0a127en cualquier otro rango de salida que desees usando interpolación lineal:function lerp(InputLow, InputHigh, OutputLow, OutputHigh, Input) { return ((Input - InputLow) / (InputHigh - InputLow)) * (OutputHigh - OutputLow) + OutputLow; } lerp (0,127,0,360,eventData.velocity); // the 0 would be 0, and the 127 would be 360.
Como los colores van de
0a255, podríamos hacer lo siguiente:var red = 0; function changeCubeColor(redValue){ var entityColorProps = Entities.getEntityProps(cubeID, ["color"]).color; entityColorProps.red = redValue; Entities.editEntity(cubeID, entityColorProps); }
Luego usa
onEventReceivedpara cambiar el color del cubo:// eventData.device, eventData.channel, eventData.type, eventData.note, eventData.velocity function onEventReceived(eventData){ changeCubeColor( lerp(0,127,0,255,eventData.velocity) ); }
Imprime el eventData en tu función onEventReceived para ver cada controlador y su salida. Esto te dirá todo lo que necesitas saber sobre cómo enrutar la tecla, deslizador, perilla o botón correcto hacia tus funciones de JavaScript deseadas.
Si deseas controlar algo fuera de Overte, o llamar directamente a un evento MIDI para controlar algo dentro de Overte, puedes usar la función:
// event similar to the above
Midi.playNote(Status, Note, Velocity);
Otras Formas de Usar MIDI en Overte
Usa Ableton para secuenciar animaciones completas de tu dominio.
Controla dispositivos del mundo real mediante los movimientos que ocurren en Overte y viceversa (piensa en un ciclo de actualización)
Configura tu iPad como un conjunto de botones que puedas presionar en cualquier momento para activar eventos en tu dominio a voluntad.
Ver también