jueves, 29 de abril de 2010

Más allá de los 7 bits...


Las capacidades del Environment y sobretodo su concepción no dejan de sorprenderme. Me resulta increíble descubrir nuevas posibilidades y combinaciones de funciones. Y el último descubrimiento es sencillamente magistral: se pueden manejar valores mayores de 127 desde los objetos del Environment. Que Santa Inspiración Divina proteja a Gerhard Lengeling por tener esa increíble visión hace ya muchos años: ¡qué maravilla de programa!

Veamos el porqué de mi efusiva alegría (ojo, esto presupone ciertos conocimientos del protocolo MIDI). Cualquier evento MIDI de canal tiene un límite de valores que va de 0 a 127 (el 0 cuenta como valor), es decir, podemos cambiar valores en un rango de 128 valores distintos. Cuando subimos el volumen con un fader en el Environment se está enviando un evento de control MIDI de 3 bytes: el primero es el de estado (tipo de evento y canal MIDI por el que se transmite), el segundo indica el controlador MIDI que estamos enviando (en el ejemplo volumen, control número 7) y el tercer byte la cantidad que estamos enviando (por ejemplo subirlo hasta el máximo, 127). En el caso de un evento de nota, el primer byte sigue siendo el tipo de evento y el canal MIDI por el que se transmite, pero el segundo byte es el número de nota (de 0 a 127, esto es C-2 a G8) mientras que el tercer byte indica la fuerza con la que se ha pulsado dicha nota (de 0 a 127). Y seguimos… hay 128 cambios de programa en el protocolo MIDI (de 0 a 127), y la post-pulsación (aftertouch) envía valores de 0 a 127 al actuar (tanto el aftertouch de canal como el polifónico que es individual para cada tecla pulsada). ¡Estamos presos en el mundo de los 8 bits!, y además resulta que no se emplean realmente 8 bits, sino 7, por ello existe la limitación de 128 valores. Si se empleasen los 8 bits podríamos manejar 256 valores para cada evento.

El fader de la derecha envía hasta 16383 valores frente a los 127 valores estándar de un controlador MIDI. Observa el campo "Rango" cuyos límites son "0" y "127" (7 bits).

Pero…. Hay un evento de canal que envía valores de 14 bits (ojo que si dividimos 14 por 2 nos da 7, una cifra mágica que ha aparecido al final del párrafo anterior). La rueda de inflexión de tono o pitchbend es un control físico que incluyen los teclados MIDI que al moverse envía un evento MIDI de 3 bytes (como los controladores, notas y aftertouch polifónico). El primer byte es como siempre el tipo de evento y canal MIDI, pero el segundo y el tercero combinan sus valores dando lugar a un límite de 16384 valores (128 x 128). Así el segundo byte se llama LSB y el tercero MSB. Cuando el LSB alcanza su valor máximo de 127, el MSB suma una unidad y espera a que el valor LSB alcance de nuevo el máximo de 127 para subir otra unidad. Y así, combinando esos dos valores se logra dar una resolución de 14 bits que es necesaria para la rueda de modulación, de otra forma los saltos al mover la rueda serían perfectamente audibles (sólo contaría con 128 pasos frente a los más de 16000 que permite)

En este caso el campo "Rango" está definido como "0" y "16383" (14 bits). Además el campo "Filtrar" está configurado como "14 bits" algo IMPRESCINDIBLE.

Y otro “pero” todavía mejor… En el protocolo MIDI es posible usar dos eventos de control combinándolos a modo de MSB y LSB. Esto suele hacerse para “crear” un evento de cambio de banco de sonidos y lo emplean sintetizadores que tienen más de 128 memorias de sonidos. Si estos eventos son enviados en la misma posición de reloj junto con un cambio de programa, el sintetizador pertinente sabe qué banco de sonidos debe seleccionar y qué sonido en particular de ese banco se desea usar.

Valor mínimo a 14 bits: "0", enviado como LSB 0 (control 64) y MSB 0 (control 32)

Valor mínimo a 14 bits: "16383", enviado como LSB 127 y MSB 127.

Secuencia de cambio de valores: se han enviado los valores 124, 125, 126, 127, 128, 129 y 130. Observa cómo el MSB (control 32) del valor 128 cambia de "0" a "1" cuando su LSB (control 64) pasa de "127" a "0".


¿Qué tiene que ver todo esto con REQUIEM?

En el último post hablé de un posible sistema de automatización para REQUIEM. El sistema que estoy barajando implicaría poder grabar hasta 500 compases de automatización con una resolución de 1/32 eventos para cada compás. Y el problema surge en esto: si REQUIEM ofrece hasta 500 compases de automatización, ¿cómo voy a grabar y editarlos si los objetos del Environment sólo pueden emplear y visualizar de 0 a 127 valores? Basta comprobarlo creando un fader en el Environment. El campo “Rango” presenta un límite de 127 como valor máximo. Así pues el contador de compases del Modo Song (Canción) de REQUIEM sólo visualizará hasta el compás 127 (o 128 si usamos el valor 0 como valor funcional).

La forma “barata” de superar esa limitación es trabajar con bancos, por ejemplo tener 10 bancos de 128 compases cada uno. El usuario vería un nuevo dígito a la izquierda del número de compás, y el compás actual como un valor de 0 a 128. Sinceramente no me parece un modo “profesional” de presentar la información, por no decir que manejar y editar los compases puede ser muy arduo al tener que seleccionar siempre el banco de 128 compases en el que estamos operando.

Pero el problema es que el Environment sólo permite ver esos valores “de alta resolución”, pero no manejarlos. Un objeto Transformador sólo procesa valores de entre 0 y 127, y los meta-eventos del Environment sólo saben mover / procesar / disparar valores de entre 0 y 127. Así que… ¿para qué mostrar valores mayores de 127 si no podemos procesarlos?

Respuesta corta: MSB y LSB
Respuesta larga: Dividir ese valor de 14 bits en dos de 7 bits. ¿Hay algo en el Environment que pueda lograrlo?. Por supuesto, un fader definido para enviar valores de 14 bits.



Trataré de abordarlo en el próximo post…

No hay comentarios:

Publicar un comentario