Sintetizadores

SysEx (III): módulos multitímbricos (1)

15/03/2013 por Pablo Fernández-Cid Actualizado el 18/03/2013

A la hora de entender su especificación SysEx, un sinte/módulo multitímbrico ofrece nuevos retos que ayudamos a superar en este artículo y el próximo. Avanzamos así en el entendimiento de las especificaciones SysEx de los equipos realmente complejos a los que nos enfrentamos hoy en día.

En inglés ‘complex’ significa compuesto (reunión de varios elementos, conjunto de dos o más cosas). En español contamos adicionalmente con una segunda acepción: ‘complicado’. Quizá por ello tendemos a creer que todo lo complejo es difícil. No necesariamente tiene que ser así. La especificación sysex de un sistema actual suele extenderse en varias decenas de páginas. Desmitificar la lectura de esas páginas, hacerla accesible, es lo que vamos a pretender en esta entrega y la siguiente (con la que cerraremos al menos temporalmente el ciclo).

Objetivo

[Índice]

En la anterior entrega revisábamos la especificación SysEx de un Roland MKS-50. Era un sintetizador ‘elemental’ en el que el único efecto disponible era un chorus (y sólo con ajuste on/off) y la estructura del motor de síntesis era igualmente básica (DCO, HPF, LPF, VCA, ENV, LFO) como quedaba reflejado en que con sólo 36 parámetros quedaba descrito plenamente un ‘Tone’ (la descripción de un sonido en ese sinte).
La llegada en los 80 de la síntesis digital al mercado masivo (ya no sólo en prototipos de investigación y centros de composición) supuso en esos años una escalada de complejidad (en el sentido no de ‘dificultad’ sino de ‘hecho de muchas partes’) uno de cuyos ejemplos es la aparición de módulos GM (y posteriores GS y XG), o cualquier otro tipo de sintetizador multitímbrico actual.

Estudiaremos la especificación SysEx de un sistema multitímbrico, en el convencimiento de que así nos preparamos para entender mejor los SysEx de cualquier sistema actual.
Tal como decíamos en la parte segunda de esta serie, necesitaremos conocer:

  • Cómo es la arquitectura del sistema (motor de síntesis, efectos: sus parámetros, etc.)
  • Cómo están dispuestos los parámetros en el mapa de memoria
  • Uso de sysex para acceder y actuar sobre los parámetros en el mapa de memoria

Caso de estudio: Roland SonicCell

[Índice]

Ya en la primera entrega os lo mostré en funcionamiento y lo usamos para algún ejemplo en vídeo. El SonicCell de Roland sorprende por todo lo que lleva en su pequeño tamaño y peso, como sucede con tantos otros sistemas actuales de los distintos fabricantes. Será su especificación sysex la que estudiemos como ejemplo en esta entrega (si queréis la podéis descargar en http://www.roland.com/support/article/?q=manuals&p=SONIC%20CELL&id=1810906).

Lo he escogido porque es habitual que Roland detalle extraordinariamente las especificaciones MIDI de sus equipos, y eso ayuda a poderlas entender. Además, dado que Roland fue el origen de la especificaciones General MIDI y GS (incluyendo la especificación Sysex de GM y GS) muchos de los sistemas GM y en general multitímbricos han adoptado soluciones muy semejantes a la hora de organizar la gestión de los sonidos, efectos, y demás elementos y su control vía SysEx.
Aún siendo una documentación técnica, este manual incluye suficientes explicaciones e incluso ejemplos que hacen abordable la lectura (si se le dedica el esfuerzo oportuno).

Arquitectura del SonicCell

[Índice]

Os resumo algunas características del SonicCell (no todas porque esto no es un anuncio) que iremos luego cotejando y contrastando desde la perspectiva de su acceso a través de SysEx. La arquitectura es la ya clásica de Roland (evolución de la que ya presentaba en su día el D50 y que se ha mejorado sucesivamente hasta sus Fantoms).

Es a la vez un potente sinte multitímbrico con una amplia dotación de efectos, un interfaz E/S de audio hacia USB, un reproductor de ficheros MIDI y Audio desde lápiz USB, y puede aplicar también efectos sobre una entrada de audio externa. No está mal para su tamaño tipo folio y su peso de poco más de un kilo.

Tone
Su polifonía como sinte es de 128 voces y cuenta para cada una de ellas con una arquitectura de síntesis de tipo ‘clásico’ que se denomina ‘Tone’ (el mismo nombre que ya usaba Roland en tiempos del MKS50, pero ahora con más riqueza de posibilidades de ajuste).

Patch
Pero los sonidos se forman realmente reuniendo hasta 4 Tones, constituyendo así un ‘Patch’ (un sonido básico, un ‘programa’ de los que podríamos reclamar con mensajes de cambios de programa). La combinación de los 4 Tones no es sólo una mezcla, sino que incluye posibilidades de reubicar en serie/paralelo sus filtros, modulación en anillo, aplicación de booster (una saturación) en diferentes puntos de la arquitectura de voz,…
Un patch también define (contiene los ajustes) para la ejecución que incluyen cosas como nivel, transposición, microafinación de la escala, programación de los efectos, respuesta a MIDI, fuentes y destinos de control (la clásica matriz de modulación), etc.

Performance
Estos patches pueden usarse ‘tal cual’ en el modo Patch (cuando queremos tocar un sonido individual -llamémoslo modo ‘monotímbrico’, pese a que combina esos 4 Tones-) o bien podemos usar el modo Performance, que es un modo multitímbrico en el que pueden combinarse hasta 16 patches.

Extras
El SonicCell contiene también un reproductor de MIDI files, WAVs y MP3 desde lápiz USB, así como un interfaz E/S Audio USB que admite señales de línea, instrumento y micro y para el que existe una unidad de efecto dedicada. Hay también un efecto ‘mastering’ en la salida audio (un compresor multibanda programable). Con todo ello la arquitectura más o menos completa sería la de figura.

Este gráfico intenta recrear lo que podría ser la estructura del ‘motor de síntesis’, es decir, de la parte que realmente genera y/o procesa audio y MIDI.

Pero falta otra parte por detallar: cómo se guarda toda la programación. La manera en la que un sintetizador es capaz de guardar la definición de múltiples sonidos para poder contener una ‘biblioteca’ de programas disponibles para ser reclamados casi instantáneamente es conservar en memoria no volátil el ajuste de los parámetros. Y es esa la parte que nosotros tocamos al crear y modificar sonidos (aunque está íntimamente relacionada con el motor de síntesis).

Mapa de memoria del SonicCell

[Índice]

En un MiniMoog los parámetros son los que tenemos disponibles para su ajuste mediante potenciómetros y controles (y si es de los originales de los 70s hay que escribir un croquis de los controles en papel para conservar ‘memoria’ de un sonido).
En el MKS50 que usamos en la parte II de la serie, vimos los 36 parámetros que constituían un Tone y los localizamos en las especificaciones sysex: dentro del mensaje un nº de parámetro (entre 0 y 35, que escribíamos en hexadecimal como 00h a 23h) era suficiente para aclarar a qué parámetro nos dirigíamos.
En el SonicCell, de idéntica manera, tenemos todos los parámetros accesibles, pero ahora pasan a ser cientos para un único sonido y es necesario estructurarlos, no podemos concebirlos en una lista única.

Estos parámetros (o cualquier otro) son editables en el panel frontal a base de navegar por menús. Alternativamente podemos aprovechar la comodidad de un software de edición que los muestre en pantalla de un ordenador -como vimos en vídeo en la parte I-. Pero también están esperándonos para ajustarlos vía sysex, como aprenderemos en lo que sigue.

Por ejemplo el filtro de un Tone tiene estos parámetros (no muestro los 15 adicionales que establecen la envolvente del filtro y su respuesta a la velocidad):

TVF Filter Type (varios paso bajo, paso alto, y otros)
TVF Cutoff Frequency
TVF Cutoff Keyfollow
TVF Cutoff Velocity Curve
TVF Cutoff Velocity Sens
TVF Resonance
TVF Resonance Velocity Sens


Esos 7+15 parámetros son sólo el filtro de un ‘Tone’. Pensad que hay 4 ‘Tones’ por Patch, pensad que además de los módulos de sintetizador están las unidades de efecto (y tal como vimos en la parte I, un Leslie en el SonicCell tiene, él solo, decenas de parámetros)… Marea un poco ¿no? Al completo, un simple Tone cuenta con aprox. 200 parámetros él solo, y un Patch ronda el millar.

Si pusiéramos en orden, uno detrás de otro, los parámetros de cada una de las performances, patches, etc. que son editables por el usuario, estaríamos definiendo el mapa de memoria del SonicCell. No hace falta que lo hagamos nosotros : es una de las partes que detalla en manual.

Desde una perspectiva global (el qué, pero no todavía el cómo), esta podría ser una representación de la memoria que tiene un SonicCell (leed las leyendas del gráfico recorriéndolo de izquierda a derecha y de arriba a abajo, como cualquier texto). Pensad que cuando hablo de un Patch o de una Performance, ahora estoy hablando de unos cuantos cientos o miles de bytes (que puedan albergar el valor de parámetros como los que hemos visto del TVF).

En la figura destaco:

  • La existencia de memoria de presets, que como tal no es editable, y por tanto no nos preocupa aquí.
  • La existencia de una parte de la memoria dedicada a datos del ‘sistema’ que se refiere a parámetros muy globales.
  • La existencia de espacio en memoria modificable por el usuario (‘user’) para poder guardar sus propias definiciones de nuevos sonidos, performances, etc.
  • Y, muy especialmente, la presencia de una zona de memoria que he llamado ‘de trabajo’ o ‘en uso’. Es en ella donde el motor de síntesis y audio va a leer para saber qué queremos que haga en cada momento.

Es en ella donde cada vez que invocamos un Patch o Performance (sea ‘preset’ o ‘user’) se copian los valores de los parámetros de ese Patch o Performance para que lo use el sintetizador interno. Y es por tanto también ahí donde deberemos apuntar nuestros mensajes SysEx para poder tocar el sonido que se está produciendo ‘en vivo’ sin afectar a los sonidos memorizados. Tendremos que hacer que actúen sobre ese espacio reflejado en verde en la figura.

Con estas pistas, debería resultar más sencillo entender el mapa de memoria del SonicCell, que aparece detallado en varias páginas del manual. Se ofrece a lo largo de varias tablas. La primera es una especie de índice, que establece las grandes ‘secciones’ dentro de la memoria. Posteriormente cada sección se detalla en nuevas tablas y subtablas.

El ‘índice’ de la memoria del SonicCell

[Índice]

Contrastad esta tabla ‘en bruto’ que ofrece el manual (al comienzo del apartado ‘Parameter Address Map’) con la gráfica anterior que os ofrecía yo. Veréis cómo se corresponden perfectamente (salvo porque aquí no aparecen los contenidos ‘preset’).

Cada elemento de la tabla viene acompañado de un valor numérico que es la dirección del mapa de memoria en donde arrancan los parámetros de ese elemento (start address). En el caso del SonicCell las direcciones se componen de 4 bytes.

Aparecen dos secciones (Setup y System) que son para parámetros muy globales del SonicCell. Arrancan respectivamente en las direcciones 01h 00h 00h 00h y 02h 00h 00h 00h. Uno de los parámetros que existe (por ejemplo) es el que permite decidir si el SonicCell estará funcionando en modo ‘monotímbrico’ (modo Patch) o en modo ‘multitímbrico’ (modo Performance), luego veremos otros.

Aparece una sección de memoria ‘temporal’ (la que yo denominaba ‘de trabajo’ o ‘en uso’ y que coloreaba en verde) dentro de la que podemos identificar a su vez:

  • A partir de 10h 00h 00h 00h los parámetros que definen la Performance que se aplica cuando se usa el modo multitímbrico.
  • El espacio reservado para albergar las definiciones de los 16 Patches (o Rhythm Sets) que se usan en la Performance
  • En la dirección 1Fh 00h 00h 00h están los parámetros que definen el Patch que se usa cuando se opta por el modo monotímbrico en vez del de Performance

Y a continuación aparece el espacio para las 64 Performances, los 256 Patches y los 32 Rhythm Sets programables por el usuario, que serían los que interesarían a quien estuviera programando una aplicación para trasferir o editar bancos de sonidos, pero no en nuestro caso.

Tablas de detalle

[Índice]

Ya sabemos dónde arrancan los ‘grandes bloques’ pero aún tenemos que andar un poco de camino para llegar a algún parámetro final. Vamos a empezar con lo fácil: miremos por ejemplo la tabla que detalla los contenidos de la sección ‘System’ y que es esta:


Vemos tres subsecciones: una que contiene parámetros ‘globales’ o comunes del SonicCell, otra dedicada a ajustar un procesador de mástering que contiene el SonicCell (un compresor multibanda que puede activarse y ajustarse a voluntad), y finalmente una tercera subsección en la que residen los parámetros que definen el tratamiento de la entrada de audio externo que tiene el SonicCell.

Pero llama la atención una cosa: en lugar de indicar los 4 bytes de la dirección sólo se indican tres (los tres últimos). Es así porque lo que están especificando el el ‘offset’ de cada subsección respecto al arranque de la sección (desplazamiento o distancia respecto a la dirección de arranque de toda la sección System). Combinarlos es fácil.

Dado que la sección System arrancaba en 02 00 00 00, podemos obtener las direcciones completas en las que arrancan estas tres subsecciones son:

02 00 00 00 para System Common
02 00 02 00 para System Mastering
02 00 03 00 para System External Input

Si yo fuera a usar la entrada ‘external’ para un micro o una guitarra, me gustaría tener un control fácil de su volumen, de la cantidad de reverb, etc. Imposible en el panel frontal (salvo con un larguísimo toqueteo de botones que lo hace inviable en directo). SysEx al rescate: mirad los parámetros que hay en la subsección ‘System External Input’ (sólo muestro los primeros):

Tenéis el control del envío de señal hacia LR, hacia el chorus y reverb general, la posibilidad de dirigir la señal hacia alguna de las unidades de efecto (por ejemplo si quisiéramos aplicar un emulador de ampli -disponible en el SonicCell- a la guitarra), podemos también elegir uno entre seis tipos de efecto de inserción que pueden situarse en la entrada de audio externa (puerta, compresor, etc.), podemos incluso editar uno a uno (no lo he reflejado) los 20 parámetros de ese efecto insertado… y aún dejo sin mencionar otras cosas.

Lo que tenemos que aprender es a obtener la dirección en la que está el parámetro deseado.

Pero ya hemos visto cómo combinar la dirección base y los sucesivos 'offsets', así que estos serían unos ejemplo:

  • La dirección para controlar el nivel de la señal ‘externa’ en la salida LR sería 02 00 03 00
  • Para controlar su envío a chorus 02 00 03 01, el envío a reverb en 02 00 03 02, etc.

Y el resto de la película lo conocéis: podré usar los pots y faders de mi controlador físico para manejar con comodidad estos u otros parámetros (enseguida vemos cómo es el mensaje).

Normalmente muchos parámetros usan para su valor sólo el rango 0 a 127 (o el equivalente -64 a 63, cuando se trata de especificar un valor relativo). También es habitual usar una parte de ese recorrido (en la tabla anterior para escoger ‘External Output MFX Select’, que sólo puede valer MFX1, MFX2, MFX3, bastan los valores 0, 1 y 2 respectivamente)...
En definitiva, el mapa de memoria (como ya vimos en la parte II sobre el caso simple de un MKS50) nos dice dónde encontraremos cada parámetro y qué rango de valores admite.

Y con eso podemos pensar ya en crear los mensajes oportunos.

Estructura de un mensaje SysEx para el SonicCell

[Índice]

La amplia sección dedicada en los apéndices del manual del SonicCell a la implementación MIDI es muy rica en detalles (casi un curso de MIDI en sí misma).
Al llegar a la parte de sistema exclusivo es igualmente generoso en explicaciones. Aparecen primero los mensajes Universal SysEx (como los que comentamos en la parte I) y luego los mensajes realmente ‘exclusivos’ del Roland SonicCell.

Con dispositivos tan complejos, necesariamente la sección sobre SysEx en los manuales es larga. El formato de los mensajes queda descrito en poco espacio, lo que más abulta es el detalle del mapa de memoria.
En esencia se trata de crear un mensaje SysEx que identifique al fabricante y modelo, la dirección del mapa de memoria sobre la que queremos actuar y finalmente el valor que queremos depositar en esa dirección de memoria.

Vamos por tanto con el mensaje sysex que permite retocar un parámetro del SonicCell y que podéis localizar en el manual:


La estructura que muestra este mensaje es la habitual en SysEx ‘moderno’ (y que es una evolución de lo que en la parte II vimos que usaban sintes de los primeros ochenta). Lo desgranamos (casi copiando traducido lo que cuenta el propio manual) y a continuación lo comentamos:

F0 41 dev 00 00 25 12 aa bb cc dd ee…ff sum F7


F0H Inicio de mensaje SysEx

41H ID de fabricante (Roland) (como ya vimos en la parte I hay códigos para distinguir los mensajes de cada fabricante y 41h es el código de Roland)

dev Nº de dispositivo (dev: puede valer entre 00H y 1FH o bien 7FH)
Muchos fabricantes (por no decir todos) permiten usar un número de dispositivo que viene a ser algo así como lo que supone el número de canal en otros mensajes MIDI. SLos mensajes que lleven un cierto nº de dispositivo (device) sólo serán oídos por aquellos dispositivos que hayan sido configurados con ese nº de dispositivo (al igual que configuramos un número de canal MIDI, los sistemas MIDI duelen tener un lugar donde se configura su nº de ‘device’).
Si recordáis, en la parte II, vimos que el MKS50 usaba un byte 0n (que valía entre 00h y 0Fh) para este mismo propósito. En el SonicCell el mensaje admite 00h hasta 1Fh (y permitiría distinguir por tanto hasta 32 SonicCells diferentes), más un valor comodín (el 7Fh) que se usa para que lo oiga cualquier SonicCell conectado.

00H Los tres bytes siguientes identifican el modelo de equipo
00H Para el SonicCell tienen que valer 00h 00h 25h
25H Otros modelos de Roland tendrán otros valores (lógicamente)

12H Tras el nº de modelo, el siguiente byte en los SysEx Roland describe el tipo de mensaje, y el manual nos informa de que es 12h el valor para representar el comando DT1: Data set 1, que es el necesario para ajustar parámetros)

aaH Los cuatro bytes aa bb cc dd componen una dirección dentro del mapa de memoria (del tipo que hemos tratado)
bbH
ccH
ddH

eeH Datos: el valor o valores que deben llevarse a esa dirección. Pueden enviarse varios en un único mensaje si corresponden a direcciones consecutivas a partir de la dirección aa bb cc dd
: :
ffH

sum Checksum: se trata de un valor que acompaña a los datos como comprobación (para detectar posible errores ál estilo de la paridad y los checksum habituales en comunicaciones digitales-). No todos los fabricantes hacen uso de este tipo de comprobaciones (muchos envían los mensajes SysEx sin mayor protección, pero en el caso de Roland, de algunos otros fabricantes y del estándar GM, sí aparece. La explicación detallada la tenéis (por ejemplo) en el manual del SonicCell. A nuestros efectos lo que nos importa es saber que si existe este valor en el formato SysEx de nuestro equipo, tendremos que usar controladores que sepan calcular ese código de comprobación. Nuevamente los Remote y los A800Pro, así como TB MIDI Stuff soportan diferentes variantes de códigos de comprobación que se han usado por los fabricantes (y de nuevo en este terreno es más ‘excelente’ una solución software como TB MIDI Stuff, aunque los controladores hardware contemplan las opciones más habituales).

F7H End Of Exclusive (EOX, final del SysEx)

Ejemplos de mensajes sysex para el SonicCell

[Índice]

Nos queda pues cerrar el círculo de lo aprendido hoy. Vaya pues la continuación de los ejemplos (aquí ‘Valor’ representa el valor del potenciómetro o fader entre 0 y 127, CSum es el resultado del cálculo del checksum que sería realizado por el controlador):

Control del nivel de la señal ‘externa’ hacia la salida LR (dirección 02 00 03 00):

  • F0 41 7F 00 00 25 12 02 00 03 00 Valor CSum F7

Envío de señal ‘externa’ a chorus (dirección 02 00 03 01)

  • F0 41 7F 00 00 25 12 02 00 03 01 Valor CSum F7

Envío de señal ‘externa’ a reverb (dirección 02 00 03 02)

  • F0 41 7F 00 00 25 12 02 00 03 02 Valor CSum F7

Ya es bastante por hoy

[Índice]

Realmente el asunto complejo de hoy no es sólo 'compuesto', también es un poco 'complicado'. Pero pensad que es el precio a pagar por mundos que se abren. Poder usar el propio SonicCell para unir un micro o una guitarra y procesarla, facilitando el control de la mezcla y el procesamiento desde pots y faders externos como hemos hecho hoy incrementa la utilidad del módulo y puede salvarnos en alguna ocasión. Y nos falta continuar.

Como ha quedado ya una presentación extensa y densa, os dejo leyéndola y pendientes de la siguiente entrega. Hemos podido llegar a ver cómo ajustar parámetros ‘globales’ (los de la sección ‘system’). La próxima entrega se centra en los Tones, Patches y Performances.

Estará entonces a nuestro alcance poder gobernar al 100% en vivo el Leslie y la distorsión sobre un sonido de órgano o el wha wha en un clav, etc. que son parte esencial de una buena interpretación, si no queremos usar los equipos como meras cajas de presets planos y sin vida. La vida que toma un mero delay cuando se retocan sus parámetros en vivo no tiene que depender de unidades de efecto externas cuando tenemos el potencial en nuestros propios sintes.
De igual manera poder recuperar el manejo de los parámetros de la síntesis desde controles físicos es otro deseo que podremos ver cumplido.

Te puede interesar