viernes, 26 de febrero de 2010

Ritmos grises


Hacía ya días que no escribía nada aunque el código no ha dejado de crecer y mejorar. Días grises en los que un divorciado de la música recuerda a su gran amor: aquello que no es ruido, la música. Me he emocionado bastante escuchando uno de mis LP preferidos (si es que esto hoy en día tiene aún sentido) He llegado a la conclusión de que quizás sea posible apartarse de ella, pero ella siempre acaba reclamándote.

Y concentrándonos en mi locura particular, que sólo sirve para certificar mis paranoias mentales dejando claro que no hay mejor forma de malgastar talento, veamos los avances de REQUIEM Environment. Ya he integrado la “caja de ritmos”, es decir, la sección “Drums” entera al interface de la aplicación. Desgraciadamente aun hay fallos en la reproducción de ritmos, ocasionalmente lo que suena no concuerda con lo que se está viendo, y debo descubrir cuándo ocurre el fallo. Viendo el trabajo realizado en esta sección, diría que está a un 50%.

Otra integración es el interface gráfico del modo “Song”, una lista de “Scenes” que van desfilando de derecha a izquierda. Es una virguería gráfica que aún debe someterse a varias pruebas de flujo de trabajo.

Pero además de todo esto he estado arreglando pequeños bugs en la sección “Lead”, los 8 sintetizadores. El modo grabación funciona de forma distinta a lo planificado: “el usuario quiere grabar, ¿puede hacerlo en modo “Pattern” (encadenado de patrones) o sólo en modo “Phrase” (sin encadenar)”. “¿Puede el usuario ir a la sección “Drums” en grabación?, ¿y volver de ella? ¿Y si en plena grabación el usuario decide cambiar de patrón en tiempo real, dónde se grabarán los datos en este caso?”

La respuesta a todas esas preguntas es una serie de acotaciones en las acciones que indican qué puede hacer el usuario. Por ejemplo, si un usuario cambia la “Phrase” en la que está grabando, todo lo que toque o introduzca a partir de ese instante se registrará en la nueva “Phrase”. Podría haber decidido abortar la grabación, es decir, desactivar el botón “Rec”, aunque eso no sería lógico.

Otro caso es el modo “Pattern”, el encadenamiento de frases (“Phrase” en el GUI). En reproducción, las frases que componen un patrón van reproduciendo conmutándose entre sí y repitiéndose las veces establecidas por el usuario. Pero ¿y en grabación? En este caso la limitación viene por el diseño de REQUIEM, pues en grabación y estando en modo “Pattern”, los patrones no se reproducirán, es decir, es el usuario el que debería pulsar el botón correspondiente para conmutar la frase. Esto tiene una ventaja terrible: permite estar concentrado en cada frase, y cuando está perfecta pasar a la siguiente. Pero la desventaja es no poder realizar una grabación en tiempo real conmutando las frases tal y como están definidas en cada patrón: la latencia del motor de REQUIEM hace que las notas puedan grabarse en parte en otra frase del patrón. De momento no puedo solucionarlo. Y la última pregunta ¿puedo grabar estando en el “Event Editor”? La ventaja de hacerlo desde esa ventana es que tiene herramientas de edición muy útiles. Es en este paso en el que estoy trabajando actualmente.

Hasta luego…

sábado, 13 de febrero de 2010

El interface gráfico de usuario II (ventana Synth Editor)


Hoy te presento un recorrido por el interface gráfico de REQUIEM Environment, desde la primera versión hasta la actual. El objetivo principal es la claridad y facilidad de uso por lo que cuantos menos indicadores mejor. Vayamos a comprobar la evolución del GUI de REQUIEM.

REQUIEM Environment 1:

- La pantalla muestra el primero de los 8 sintetizadores de REQUIEM aunque todavía no hay selector de sintetizador.
- La sección de modulación es muy sencilla: 22 modulaciones generadas por 2 LFOs por dispositivo y 11 modulaciones desde un LFO master (común a todos)
- La sección de efectos cuenta con sus propias modulaciones (2 fuentes / 2 destinos)


REQUIEM Environment 2:

- La sección de modulación ha cambiado por completo. Ahora se dispone de 6 LFOs master y ninguno exclusivo para cada sintetizador. Además es posible asignar la misma fuente de modulación a distintos destinos de modulación y ajustar la cantidad de modulación enviada.
- Introducción de los monitores de modulación: las barras verdes al lado de las modulaciones se mueven dibujando la modulación generada, siendo muy útiles al establecer el ancho de banda de la modulación.
- Se ha introducido el selector de dispositivos (sintetizadores), una barra vertical multicolor que al pulsar en cada casilla cambia el color de los controles en pantalla mostrando el mismo color que el del dispositivo seleccionado.


REQUIEM Environment 3:

- Menos controles y más claridad.


REQUIEM Environment 4:

- Selector de dispositivos en horizontal y sin colorido. Distrae menos.
- La sección "Master" cambia a un fader tipo vector para controlar el volumen y panorama.  


REQUIEM Environment 5:

- Cambio en la sección “Scene”.
- Introducción del “Multimenu”, un sistema de menús que sólo muestra las acciones y funciones pertinentes en cada sección. Así, al mover un parámetro en la sección de síntesis, el "Multimenu" mostrará las funciones de copiar y pegar sonidos (etc…) y al mover un parámetro de la sección de modulación, el "Multimenu" mostraría las acciones para dicha sección.


REQUIEM Environment 6:

- Cambio de posición del "Multimenu”.
- Cambio de posición del contador principal a una posición centrada en el GUI.


REQUIEM Environment 7:

- Cambio en la sección "Master": introducción de un medidor de audio (picómetro basado en bus) El vector se conserva para fines de modulación.
- Los envíos de efectos han sido eliminados de la pantalla principal. Más claridad y espacio para la sección "Master".


REQUIEM Environment 8:

- Selector de dispositivos ampliado: ahora ya es posible ir al dispositivo de ritmos (botón “D” en el selector) y al futuro dispositivo de acordes (botón “C” en el selector)

Lo que has visto es sólo una de las pantallas de REQUIEM. El dispositivo de ritmos tiene una configuración completamente distinta de los controles así como los moduladores, otra pantalla radicalmente distinta a las dos anteriores.


Hasta la próxima…

martes, 2 de febrero de 2010

El interface gráfico de usuario I (visualización)


Esta es la parte que más me gusta diseñar: la creación de las rutas que el usuario debe seguir para lograr su propósito. El mundo de la informática musical está repleta de excelentes interfaces de usuario (GUI), por ejemplo el magistral Reason con el concepto de rack virtual, el curioso interface de Ableton Live o la súper-configuración del GUI de Cubase. Cito estos pero en realidad podría citar cientos de plug-ins con genialidades en la forma en que permiten ser manejados. Lógicamente hay límites que el Environment no puede simular, no puedo crear un interface de usuario que esconda partes para luego volver a mostrarlas, o permitir redimensionar sus elementos. Pero dentro de las severas limitaciones del Environment (es lógico, nunca fue diseñado para crear aplicaciones musicales), es posible lograr resultados muy realistas y sobretodo prácticos.

El cometido básico de un interface de usuario es el de mostrar y editar el contenido de las memorias internas. Cualquier editor MIDI de Cubase, Logic o cualquier secuenciador hace exactamente eso. Es más, todo el programa entero, la parte “visible”, se dedica a mostrarnos la información que hemos creado, ya sea un procesador de textos, un procesador de imagen o un procesador de audio, como nuestros queridos secuenciadores / plug-ins.

Particularmente me gustan los interfaces de usuario que únicamente muestran la información que es susceptible de ser editada en ese instante. Por ejemplo, en el excelente sintetizador FM8 de Native Instruments se nos muestran los parámetros de cada operador de la síntesis FM de forma individual. ¿Para qué ver los datos del primer operador si estamos editando el segundo?, ¿para qué rellenar la pantalla con más datos y cajas que solo nos perturbarán?

Poder esconder datos irrelevantes es una virtud, pero también una necesidad. En Reason puedo encoger los dispositivos que en ese instante no son el objetivo de mi edición. Así ahorro espacio en pantalla pero además no debo estar viendo controles innecesarios que ya he programado y que no pienso editar en ese instante.

Este tipo de interfaces de usuario funcionan conmutando la información del dispositivo o área seleccionada. Por ejemplo, en REQUIEM hay 8 sintetizares virtuales con todos sus parámetros, modulaciones y 128 patrones encadenables. Es absurdo mostrarlo todo en una única pantalla, aunque desde el punto de vista de programación es algo mucho más cómodo y sencillo.

En cambio, cada vez que selecciono uno de los sintetizadores, REQUIEM cambia el color de los controles mostrados según el color del sintetizador seleccionado, y “escupe” los estados de los controles y parámetros de ese sintetizador seleccionado. Pero los otros sintetizadores deben seguir operando “por detrás” (en background), es decir, REQUIEM debe continuar sonando sin importar lo que seleccione en el interface de usuario. Esto requiere de dos rutas principales de datos: los datos reales salientes y los datos del dispositivo virtual seleccionado en ese instante, que deben ser enviados a la “salida” y además mostrar valores en pantalla para permitir su corrección. Así pues hace falta seleccionar el dispositivo (por parte del usuario) y REQUIEMdisparará” los datos pertinentes (usando rutinas de disparo de eventos, de las cuales ya he citado su más importante exponente: meta-evento 99 con valor 0)

El Environment contiene un curioso objeto llamado Alias, que “clona” el aspecto y definición (contenedor en E-Code) de otro objeto que sea de su mismo tipo. De esta forma puedo lograr que un objeto fader tenga un color y tamaño, pero que a pulsar un botón éste se convierta en una caja numérica de otro color y tamaño, modificando además el tipo de evento que puede recibir y/o enviar. Además puedo asignar varios objetos “master”, por ejemplo 5 tipos de faders, e ir conmutando del uno al otro (con el uso de Asignadores de Alias, un objeto Alias y los objetos empleados como modelos).


El Fader resaltado es en realidad un objeto Alias que toma la definición del evento a enviar /recibir y el aspecto gráfico de los objetos conectados a partir de la segunda conexión del Alias Assigner. Observa que ahora el Alias se comporta como el Fader 1 gris inferior, y envía control 7 por el canal 1 (ver Monitor). El valor 100 es la posición actual del Alias. La línea azul delgada enlaza el Alias con el objeto a clonar: es un sencillo indicativo.



Ahora hemos conmutado el Alias Assigner y el Alias superior toma el aspecto y definición del Fader rojo, que envía control 7 por el canal 3. Moviendo el Fader Alias ya no se enviará control 7 por el canal 1, sino que la definición cambia siendo clonada del Fader 3 rojo.


Hemos conmutado el Alias Assigner al Fader 2, definido como control 7 por el canal MIDI 2. Veamos los parámetros del objeto Alias. Podemos indicar que "tome" al nombre del objeto original, que el tamaño coincida o que pueda re-dimensionarse libremente, o re-canalizar los eventos procesados por el Alias.


Ahora veamos el Alias Assigner... en realidad es un conmutador que permite indicar qué conexión se tomará como activa. En la conexión superior se conecta el objeto Alias, y en las siguientes los objetos a clonar. Además el Alias Assigner cuenta con su propia definición de entrada y salida, con lo que podemos controlarlo remotamente. En este caso he creado otro fader que cambia la conmutación de Alias Assigner con un evento de control 7.


Pero por desgracia el uso de los Alias es muy limitado. No puedo usar Alias en Macros, es decir, nunca podré crear una Macro cuyos faders cambien de aspecto dinámicamente. Tampoco puedo convertir un objeto Fader en un objeto Teclado Virtual… sólo puedo conmutar entre objetos del mismo tipo, por ejemplo un objeto retardo con un tiempo de retardo convertido a otro objeto de retardo con otro tiempo de retardo distinto. Pero además hay otras severas limitaciones, hay objetos imposibles de clonar, por ejemplo conmutar entre dos objetos Monitores de distinto tamaño… Y lo más importante: cuando un Alias cambia de aspecto provoca un redibujado de pantalla, Logic actualizará la ventana del Environment automáticamente, así que se producirá un breve parpadeo. Un último detalle, el uso masivo de Alias no es bueno, carga mucho la capacidad de proceso del Environment. No es aconsejable crear todo un interface de usuario únicamente con Alias, eso sería llenar la pantalla con cientos de objetos Alias que Logic debería redibujar constantemente: hay que usarlos sabiamente.

Aún así, el uso de objetos Alias es imprescindible para el diseño de REQUIEM, así que he tratado de exprimir al máximo su uso, tratando de lograr una experiencia de uso lo más cercana posible al de un software “normal”.