Tabla de contenido:

(casi) Programador universal MIDI SysEx CC (y secuenciador ): 7 pasos (con imágenes)
(casi) Programador universal MIDI SysEx CC (y secuenciador ): 7 pasos (con imágenes)

Video: (casi) Programador universal MIDI SysEx CC (y secuenciador ): 7 pasos (con imágenes)

Video: (casi) Programador universal MIDI SysEx CC (y secuenciador ): 7 pasos (con imágenes)
Video: Programador universal TL866CS 2024, Noviembre
Anonim
(casi) Programador universal MIDI SysEx CC (y secuenciador …)
(casi) Programador universal MIDI SysEx CC (y secuenciador …)
(casi) Programador universal MIDI SysEx CC (y secuenciador …)
(casi) Programador universal MIDI SysEx CC (y secuenciador …)

A mediados de los ochenta, los fabricantes de sintetizadores iniciaron un proceso de "menos es mejor" que llevó a los sintetizadores barebones. Esto permitió la reducción de costos por parte del fabricante, pero hizo que el proceso de parcheo fuera tedioso, si no imposible, para el usuario final.

Los propios fabricantes y empresas de terceros crearon cajas opcionales llenas de perillas y / o controles deslizantes para permitirle realmente "jugar" con los tonos de sus sintetizadores, pero estos son demasiado caros hoy en día y, como siempre, nos vemos obligados a encontrar soluciones baratas por nosotros mismos;)

Este proyecto surgió de mi necesidad de programar fácilmente parches en algunos de mis últimos sintetizadores comprados: un Roland Alpha Juno 2 y JX8P. Comenzó como un simple controlador SysEx, luego creció en mí y se convirtió en algo más complejo, con otros sintetizadores compatibles en el camino (Korg DW8000, Oberheim Matrix 6 / 6R, SCI MAX) y un secuenciador incorporado.

En este instructivo, le mostraré cómo realizar su propio controlador: una herramienta barata que emula esas cajas de control de parámetros de alto precio … y más (continúe leyendo para obtener más detalles …).

Paso 1: Qué es exactamente esto (y qué no …)

Qué es exactamente esto (y qué no es …)
Qué es exactamente esto (y qué no es …)
Qué es exactamente esto (y qué no es …)
Qué es exactamente esto (y qué no es …)
Qué es exactamente esto (y qué no es …)
Qué es exactamente esto (y qué no es …)

El controlador MIDI SysEx y Control Change aquí es esencialmente un controlador MIDI de 16 botones (potenciómetros) y 4 botones. El boceto predeterminado maneja tres "páginas", para un total de 48 parámetros de tono de sintetizador.

Hice que el controlador fuera compatible con los mensajes MIDI de cambio de control (un tipo de mensaje MIDI simple y "global" ampliamente utilizado por los fabricantes de sintetizadores, especialmente en los años 90) y los mensajes SysEx (otro tipo de mensaje MIDI, mucho menos general y altamente específico del sintetizador utilizado en los años 80).

En particular, el controlador por defecto es compatible con:

- Roland Alpha Juno (1/2)

- Roland JX8P

- Korg DW8000

- Oberheim Matrix 6 / 6R (firmware> 2.14)

- Circuitos secuenciales MAX / SixTrak.

Eventualmente, puede habilitar el controlador para que actúe en cualquier sintetizador que pueda recibir mensajes de cambio de control MIDI (CC), pero está deshabilitado de forma predeterminada.

Dada la naturaleza de código abierto del proyecto, es muy fácil admitir cualquier otro sintetizador de su elección (consulte el paso del código para obtener más detalles).

El diseño de los parámetros de tono con todos esos números puede ser confuso al principio, pero no es "aleatorio" como podría parecer: sigue el orden de la tabla de implementación MIDI del fabricante. Esta fue una elección de diseño para mantener el código simple y "universal".

Puede descargar hojas de imágenes con el "diseño" 4x4 que realicé para Alpha-Junos, JX8P, DW8000, Matrix 6 y MAX / SixTrak en esta página: los parámetros azules son los que puede modificar en la página 1, los de color negro los de la página 2 y naranja los de la página 3.

Incluso si el controlador no tiene pantalla, jugar con sintetizadores que le muestran qué parámetro se está afinando en tiempo real hace que el proceso de creación de un parche sea un placer. El JX8P y Matrix 6, por ejemplo, son capaces de esto; el Alpha Juno, en cambio, no le muestra el parámetro que se está cambiando y hace las cosas un poco más difíciles (pero crear parches increíbles es definitivamente factible y más fácil que usando la interfaz incorporada de knobless); DW8000 solo tiene pantallas numéricas, pero puede ver sus ajustes en tiempo real, por lo que se ubica en el medio de esto.

¿Qué pasa con esos botones allí?

Bueno, el primero (arriba a la izquierda en mi diseño) es para navegar por la página: salte a la página del siguiente parámetro cada vez que presione el botón. Los LED indicarán en qué página se encuentra.

El segundo, cuando se presiona, envía el parche en el que estaba trabajando de vuelta al sintetizador (imagínelo: hizo el parche de su vida, luego tocó un botón de programa en la superficie del sintetizador y se cargó el parche específico del botón … todo su trabajo se ha ido !). Con este botón puede enviar todos los valores que el programador había memorizado durante el último proceso de parcheo. Este proceso de recuperación de parches no funciona si presiona el aleatorizador nuevamente (el proceso de aleatorización sobrescribe todos los parámetros en la memoria) y solo es efectivo en los parámetros que editó al menos una vez. El último parche no se guarda en la memoria después del apagado.

El tercero es para una función secundaria: ¡el aleatorizador / parcheador! Gire completamente en sentido antihorario las perillas en las que desea que el parámetro en el que actúan se bloquee en el valor mínimo (es decir, LFO del oscilador, envolvente del oscilador, etc.) o gire completamente en el sentido de las agujas del reloj para maximizar el valor (es decir, volumen de mezcla del oscilador, volumen de VCA, etc.) y presione el botón para iniciar el proceso de aleatorización para todos los demás parámetros.

El cuarto botón está ahí para activar un easter egg (más o menos …) que coloqué en el código después de notar que el diseño era perfecto para … ¡un secuenciador MIDI de 16 pasos! Exactamente: presione el cuarto botón (botón MODE), el controlador entrará en el "modo secuenciador" y se le permitirá disparar notas de manera similar a como lo hacían los antiguos secuenciadores analógicos. ¡Bien, eh!

Presione el botón MODE nuevamente para volver al modo controlador / parche.

¿Qué pasa con esos LED?

Hay 4 LED en correspondencia con cada botón (a la derecha de cada botón en mi diseño); estos LED tienen múltiples variantes:

1) te dicen en qué página de parámetros te encuentras (el LED superior se enciende cuando estás en la página 1, el LED de abajo se enciende cuando la página 2 está activa, el LED 3 está encendido… lo has calculado tú mismo). Estamos limitados a un cajero automático de 3 páginas, pero el código se puede ajustar fácilmente para manejar más páginas;

2) el segundo LED indica la página de parámetros 2 Y se enciende cuando el microcontrolador está enviando el parche anterior (recuperación de parche);

3) el tercer LED indica los parámetros de la página 3 Y se enciende durante el proceso de aleatorización.

El cuarto LED no hace nada en el modo de controlador MIDI y se utiliza para el cambio de MODO global.

Todas estas funciones se transmiten como mensajes MIDI, por lo que para que sea eficaz, su sintetizador debe ser capaz de recibir e interpretar este tipo de mensajes

Paso 2: ¡El secuenciador "oculto" de 16 pasos

los
los

Como dije, mientras probaba el controlador me di cuenta de que sería genial dejar correr una secuencia de notas para poder ajustar los parámetros del sintetizador y tener una mejor idea del efecto final en el tono. Tengo un secuenciador de software (¡me gusta mucho seq24!), ¡Pero este hardware es un secuenciador de 16 pasos casi PERFECTO! Entonces fue solo una cuestión de código para implementarlo.

Puede alternar entre el modo de controlador y el modo de secuenciador presionando el botón # 4 (botón MODE).

Mientras que en el modo de secuenciador, los botones funcionan de manera diferente y los LED le brindan nueva información:

- el primer botón (botón SHIFT) cuando se presiona permite modificar el tempo, la longitud de la nota, los canales y la octava; el valor del tempo viene dado por la posición del primer potenciómetro, la longitud de la nota se calcula desde la posición del segundo potenciómetro, los canales MIDI desde la tercera y cuarta posiciones del potenciómetro y la octava (-1 o hasta +2) desde el quinto potenciómetro. Puede controlar el tempo desde 40 BPM (gire el potenciómetro # 1 completamente hacia la izquierda mientras mantiene presionado el botón # 1) hasta casi 240 BPM (gire el potenciómetro # 1 completamente hacia la derecha mientras mantiene presionado el botón # 1). Puede establecer la longitud de las notas en notas medias, negras, corcheas y dieciséis girando el potenciómetro n. ° 2 mientras mantiene presionado el botón SHIFT. Puede configurar los canales MIDI (canal primario y canal secundario) de 1 a 16. El rango de notas base (de C2 a F # 4) puede reducirse una octava o aumentarse en una o dos octavas.

Por defecto, el tempo se establece en 120 BPM y la longitud de las notas en negras.

- el segundo botón inicia y detiene la secuencia de notas. Como se dijo, si cambia de modo presionando el botón # 4 (MODO) mientras ejecuta la secuencia, ingresará al modo de controlador, pero la secuencia continuará ejecutándose.

- ¡el tercer botón es un PÁNICO! Al presionarlo, se apagarán todas las notas.

- el cuarto se usa para alternar entre modos globales (pather o secuenciador) cuando no se presiona el botón # 1, o entre modos de secuencia (ver a continuación) cuando se presiona # 1.

En el modo de secuenciador, si presiona el botón de selección de modo mientras mantiene presionado el botón # 1 (SHIFT), puede alternar entre 3 modos de secuencia diferentes:

1 - secuencia mono de 16 pasos

Secuencia poligonal de 2 a 16 pasos: las notas una octava más bajas que las definidas por los potenciómetros también se activan (esto drena 2 voces por tiempo)

Polisecuencia de 3-8 pasos, canal dual: se envían dos secuencias paralelas de 8 pasos a dos canales diferentes (CH1 y CH2 por defecto); Al establecer el mismo valor de canal tanto en el canal primario como en el secundario, puede tener dos secuencias paralelas de 8 pasos reproducidas por el mismo sintetizador (polifónico).

Acerca de los LED: tan pronto como ingrese al modo secuenciador, las cuatro luces se encenderán. Cuando inicie la secuencia, los LED seguirán la secuencia (o las secuencias). Coloqué un LED cada cuatro potenciómetros y es suficiente para mí. Sería sencillo modificar el boceto para manejar 16 LED, uno para cada paso.

El secuenciador por pasos pierde características que alguien podría considerar necesarias: entrada de sincronización MIDI, retención de pasos (solo puede apagar un paso), salida de CV.

He implementado el reloj OUT, pero de alguna manera tiene errores. Probé dos enfoques para esto (uno con y otro sin interrupciones del temporizador), pero ambos eran imperfectos (o un error total). El reloj MIDI debe ser estrictamente perfecto para funcionar a largo plazo. De todos modos, se envía una señal de reloj y puede desactivarla directamente en el boceto (consulte más adelante para obtener más detalles).

Fíjate que este secuenciador por pasos es MIDI, o digital si lo prefieres, por lo que para que funcione debes estar conectado a un sintetizador habilitado para recibir e interpretar este tipo de mensajes

Paso 3: Hardware necesario y construcción

Hardware necesario y construcción
Hardware necesario y construcción
Hardware necesario y construcción
Hardware necesario y construcción
Hardware necesario y construcción
Hardware necesario y construcción
Hardware necesario y construcción
Hardware necesario y construcción

Después de todas estas palabras, ¡divirtámonos!

Vamos por el camino común de Arduino. Usé un Arduino MEGA debido a la gran cantidad de entradas analógicas (queremos una caja llena de perillas nudosas, ¿no es así?:)).

En particular, Arduino MEGA puede manejar 16 entradas analógicas (con algunos ajustes de hardware, es decir, mediante muxing, puede aumentar esto, pero no vamos por esta ruta aquí), por lo que enviaremos los 48 mensajes MIDI a través de 16 potenciómetros. Cada potenciómetro controlará tres parámetros, uno para cada "página"; las páginas se seleccionan mediante un botón de cambio.

Lista de hardware:

- 1x Arduino MEGA

- 16 potenciómetros lineales de una sola vuelta de 10 K ohmios

- 16 perillas de olla

- 4x pulsadores momentáneos

- 4x LED

- Resistencia 6x 220 ohmios

- 1x conector MIDI

- 1x caja de proyectos ABS

Algo de cable, alambre de soldadura y seis u ocho horas de tiempo libre.

Usé una placa de perforación y algunos cabezales de clavija para realizar una especie de blindaje en el que soldé las resistencias y dirigí los cables. Esto tiene la ventaja de permitirle sacar su Arduino y usarlo para otros proyectos (¡todos nos quedamos sin placas Arduino en algún momento!). De todos modos, no es obligatorio y otro buen enfoque podría ser desoldar los cabezales de clavija arduino MEGA y soldar los cables directamente en su lugar.

Usé resistencias de 200 ohmios en lugar de resistencias de 220 ohmios y funcionan perfectamente de todos modos; Apuesto a que incluso las resistencias de 150 ohmios funcionarían muy bien (tanto para la comunicación MIDI como para los LED).

Para dar forma a la caja, primero apliqué un poco de papel adhesivo en la superficie de la caja, midiendo dónde se deben perforar los agujeros (tenía 3 cm de agujero a agujero para que encajaran todas las macetas) hice los agujeros guía y luego los agrandé hacia la derecha tamaño para dejar pasar el hilo de las macetas o el hilo de los botones con un mini taladro. Pasé más o menos 2 horas para terminar la caja. También me di cuenta de los pequeños agujeros y pegué los LED en su lugar.

También perforé un agujero para el conector MIDI OUT y otro para el conector de alimentación arduino (utilicé directamente el conector de alimentación USB incorporado y bloqueé firmemente el arduino MEGA en su lugar).

ADVERTENCIA: siempre use SIEMPRE protección para los ojos y las manos durante la perforación, sea cual sea el material en el que esté trabajando (plástico, madera, metales, compuestos … no importa: corre riesgo tanto con las herramientas eléctricas como con las virutas de material erosionado / quemado). desde la herramienta en movimiento).

Luego, coloqué todas las ollas y botones y soldé los componentes según la imagen adjunta. Una forma eficaz de reducir el peso del objeto final (y la longitud de los cables) es conectar en cadena todas las ollas tanto en la línea 5V como en la línea GND.

Y antes de que alguien pregunte: lo sé, ¡esa caja que usé es fea! Pero era gratis y nada mejor que gratis:)

Paso 4: cableado

Alambrado
Alambrado

Conectar las cosas es tan fácil como conectar un potenciómetro (x16), un botón pulsador (x4) y un LED (x4) a una placa de microcontrolador Arduino. Todos los conceptos básicos de Arduino están cubiertos aquí:)

Adjunto está el cableado. Darse cuenta de:

- Se utilizan todos los pines analógicos (de A0 a A15), uno para cada potenciómetro;

- Se utilizan 4 pines digitales (entradas) (de D51, D49, D47, D45), uno para cada botón;

- otros 4 pines digitales (salidas) se utilizan para LED (D43, D41, D39, D37);

- La conexión de salida MIDI es muy simple y requiere dos resistencias de 220 ohmios (pero funcionará hasta 150 ohmios)

- Los botones no solicitan resistencias pulldown ya que el boceto activa las resistencias pullup internas de Arduino.

- Cada LED solicita una resistencia limitadora actual (200-220 ohmios están bien para los LED verdes).

Usé los pines digitales enumerados para mayor comodidad, pero no son pines "especiales" (no estamos usando la capacidad pwm de algunos pines aquí o alguna otra característica específica de los pines): puede configurar sus pines digitales favoritos, pero recuerde modificar el código en consecuencia o sus botones / LED no funcionarán!

Tenga en cuenta que la conexión MIDI OUT en la imagen es la vista FRONTAL (no la vista trasera).

Paso 5: Software: algún vínculo con la teoría

No voy a explicar toda la teoría detrás de los mensajes System Exclusive o Control Change porque hay muchos artículos buenos por ahí y es una tontería reescribir lo que ya se ha escrito.

Solo un enlace rápido para la implementación de Roland SysEx:

- https://erha.se/~ronny/juno2/Roland%20Juno%20MIDI%2… (INGLÉS)

- https://www.2writers.com/eddie/tutsysex.htm (INGLÉS)

- https://www.chromakinetics.com/handsonic/rolSysEx.h… (INGLÉS)

- https://www.audiocentralmagazine.com/system-exclusi… (ITALIANO)

y algún enlace para MIDI en general:

-

-

Paso 6: Software: el boceto

Aquí se adjunta el boceto que debe cargar en su Arduino Mega.

Traté de mantener el programador lo más "universal" posible, lo que significa que traté de reducir los fragmentos de código específicos del sintetizador. Traté de mantener el código lo más simple posible. Agregar el secuenciador por pasos hizo las cosas más complejas y el código más complicado, de todos modos valió la pena para mí. Mantener el código "universal" es la razón por la que el diseño del controlador es tan "aleatorio": sigue el orden de los parámetros de la implementación MIDI que el fabricante del sintetizador definió en el manual. Puede resultar confuso al principio, pero se acostumbrará muy rápido.

El código / boceto / firmware predeterminado admite "solo" 48 parámetros (tres páginas de 16 perillas cada una), por lo que no sería posible controlar todos los mensajes MIDI admitidos por su sintetizador (piense en Access Virus o Novation Supernova: aceptan más o menos 110 parámetros compatibles con MIDI). Puede cambiar fácilmente el boceto para admitir más mensajes, si es necesario.

En realidad, se admiten mensajes SysEx compatibles con Roland Alpha-Juno, JX8P, Korg DW8000 y Oberheim Matrix 6. Dejé el código para los mensajes compatibles con Juno 106 en caso de que lo necesite.

Para Matrix 6, tuve que seleccionar los parámetros a controlar. Dejé fuera el tercer sobre, la segunda rampa y algo más. La matriz no se puede controlar a través de MIDI de todos modos, por lo que también está fuera. Necesita el firmware actualizado (ver. 2.14 o superior) y debe configurar el parámetro "Master -> Sysex Enable" en "3".

El reloj de salida tiene algún error (el reloj debe ser estrictamente perfecto para funcionar como debería y probablemente los dos enfoques que adopté no fueron efectivos). Por defecto, está deshabilitado.

El código incluye comentarios, por lo que no es necesario hacer más comentarios aquí.

Como siempre: recuerda que no soy un codificador en la vida real y seguro que hay mejores formas de codificar lo que necesitamos aquí. Si eres un codificador y tienes alguna sugerencia, ¡eres bienvenido! Por favor envíeme cualquier variación que pueda aumentar la eficiencia / efectividad del código y la incluiré en el boceto principal (¡citando al Colaborador obviamente!).

Siempre aprendo algo nuevo leyendo el código de un buen codificador;)

Paso 7: Proyectos relacionados

Hasta donde yo sé, no hay un controlador de parámetros MIDI y un secuenciador (¿tal vez el antiguo Behringer BCR2000 con un firmware modificado?)

De todos modos, si no eres propenso a realizar una caja como esta pero estás muy interesado en soluciones baratas para controlar los parámetros de tu sintetizador de forma remota, considera estas otras alternativas:

- Editor MIDI CTRL: este es un brillante programa de código abierto gratuito que se ejecuta en win / Linux / mac que puede convertir su PC en un controlador completo para sintetizadores SysEx

- Convertidor CC "junosex" de David Konsumer: este proyecto solicita un trabajo de hardware menor de su lado y la idea es genial - un convertidor CC a SysEx basado en arduino que le permite usar un controlador MIDI común que no sea SysEx (es decir, un teclado maestro AKAI MPK) para hablar con su sintetizador preparado para SysEx

Recomendado: