Mostrando entradas con la etiqueta REQUIEM. Mostrar todas las entradas
Mostrando entradas con la etiqueta REQUIEM. Mostrar todas las entradas

lunes, 17 de mayo de 2010

Control remoto


Antes de exponer las novedades del proyecto debo confesar que este blog ha batido un record muy especial: el de no tener ningún comentario acerca de lo que se expone. Como autor desconozco si se comprende el contenido expuesto, si interesa o incluso si puedo ayudar a mejorar la comprensión. Esto certifica la realidad: REQUIEM es una curiosidad de un loco que ha perdido el tiempo convirtiendo los objetos del Environment en un lenguaje de programación. Pues sí, este es el caso.

Hace días contacté con una de las eminencias del Environment a nivel internacional. El interés fue tanto como larga puede ser una frase de menos de veinte palabras. El Environment ya no interesa. Es una ventana más del poderoso engranaje de Logic, pero no una prestación estelar. Lejos quedan los días en los que uno se diseñaba el entorno virtual de su estudio. Posiblemente esto sea debido a que masivamente se usan los plug-ins de sintetizadores virtuales, y éstos ya cuentan con excelentes interfaces gráficos de usuario. El Environment tenía sentido en un mundo rodeado de hardware externo con pequeñas pantallas LCD. Todos los otros usos que podamos darle son mínimos: procesos musicales para música experimental, módulos para “humanizar” pasajes, secuenciadores… REQUIEM

Pero desde el primer día dejé claro que este proyecto se hacía realidad para demostrar la potencia REAL del Environment, así que mi única misión es que diseñarlo, acabarlo, crear su documentación y dejarlo ahí en el océano de la red: crear un producto acabado.


Remote Editor

Volvamos a las novedades de los últimos días en la programación de REQUIEM: el módulo de control remoto. Mientras se resuelven varios problemas surgidos acerca del diseño del modo Song, he decidido avanzar por otro nuevo flanco: que el usuario pueda controlar parámetros de REQUIEM con los controles físicos de su teclado de control MIDI (sliders y codificadores). De esta forma se podrán abrir y cerrar filtros, controlar panoramas y volúmenes, y en definitiva todos los parámetros de síntesis de los dispositivos de REQUIEM.

La ventana “Remote Editor” muestra 8 faders virtuales que actúan como control remoto. El usuario puede asignar cualquier controlador MIDI (del 0 a 127) para controlar remotamente estos faders que a su vez pueden estar asignados a sus respectivos destinos. Por ejemplo se podría asignar el primer fader para controlar el “Cutoff” del sintetizador 1 de REQUIEM, con un ancho de banda de 0 a 127 (o por ejemplo de 80 a 100 para un efecto más suave).


Cada uno de los 8 faders virtuales puede controlar remotamente 2 destinos: uno para los sintetizadores y otro para la caja de ritmos. Además he añadido la posibilidad de seleccionar el modo de operación. En el caso de tener un destino que ya está siendo modulado (por ejemplo por un LFO), podremos elegir sustituir esa modulación o controlar su ancho de banda. Esto se hace desde la casilla “Mode”, seleccionando “Override” o “Replace”.


Así pues cada fader cuenta con estos parámetros:

  • Source: Qué controlador MIDI (0 a 127) controlará remotamente el fader desde la entrada MIDI.
  • Range-Low: Valor mínimo al que responderá el fader.
  • Range-High: Valor máximo al que responderá el fader.
  • Synths: Qué parámetro de los sintetizadores controlará.
  • Drums: Qué parámetro de la caja de ritmos controlará.
  • Mode: Sustituye o modula la modulación existente.

He creado un banco con 128 memorias almacenables por el usuario de forma que cada fader virtual pueda cargar una de las 128 memorias. A eso le he dado del nombre de “Definitions” (Definiciones) Las definiciones pueden ser copiadas, pegadas y eliminadas.


Además hay otra función muy útil: “Learn”. Al pulsar este botón REQUIEM escuchará” la información de control recibida y automáticamente establecerá el parámetro “Source”. Así el usuario no tiene que reconfigurar nada en su teclado de control, simplemente pulsar el botón y mover el control. Al recibir esos datos REQUIEM usará el controlador recibido. Como la función “Learn” abre la puerta MIDI para poder “escuchar” la informaron entrante, he incluido un tiempo de operación de forma que si no se recibe nada el modo “Learn” se deshabilite. Esto evita que un usuario abandone esa ventana dejando la función “Learn” habilitada.

Por otro lado también es posible habilitar o deshabilitar la recepción de controles de volumen y panorama para cada dispositivo (sintetizadores y caja de ritmos) además de habilitar o deshabitar la recepción desde los faders virtuales. Estas opciones no son memorizables, no forman parte de las “Definitions”.

Ya está todo funcionando, tan sólo falta enlazar los destinos y la entrada MIDI real. Espero poder avanzar con el  Modo "Song", que es mi verdadero quebradero de cabeza.

 Esquema del flujo de la señal MIDI entrante a REQUIEM

domingo, 9 de mayo de 2010

Mapa de pantallas


He montado un pequeño diagrama de las pantallas principales de REQUIEM. Como verás hay pantallas en rojo vacías. Esto significa que o bien no existen (por ejemplo la pantalla “Preferences”) o bien que se está trabajando en las mismas (como el caso de “Song”)

En este diagrama no aparecen las pantallas que contendrán todo lo relativo a la detección de acordes (una función realmente “heavy” desarrollada en parte) y el mezclador (que ya existe en estado embrionario) Iré actualizando el mapa a medida que se completen las funciones restantes.

Creo que de esta forma se entienden mejor tanto la estructuración como las funcionalidades de REQUIEM. Debajo de la imagen hay un enlace para descargar una versión en alta resolución. 

jueves, 15 de abril de 2010

Automatízame un poco, por favor…

 
Hacía unos cuantos días que no me pasaba por este barrio. Confieso que a veces me cuesta “environear”, normalmente después de preguntarme para qué servirá semejante esfuerzo. Aún así, todavía no me he caído: sigo teniendo la esperanza de aunar todas las ideas acerca de REQUIEM y lograr terminarlo.

Hoy toca hablar de las automatizaciones, esto es, poder grabar y reproducir cambios en los controles del interface de usuario. Logic tiene un excelente sistema de automatizaciones, al igual que Cubase, Reason (en menor medida) y la mayoría de secuenciadores de audio y/o MIDI. ¿Y REQUIEM? (dejando a un lado sus potentes 6 LFOs)

Primero veamos en qué consiste un sistema de automatización: se trata de pistas especiales en las que podemos grabar cambios en los controles. Esos datos pueden grabarse de diversos modos: al tocar el fader deseado y moverlo, reemplazando datos existentes, incrementando o reduciendo la automatización existente, etc… La edición suele ser gráfica en forma de curvas o bien en forma de lista (como una lista de eventos). Técnicamente hablando es algo tan sencillo como ir grabando a cierta resolución los cambios en los controles.

¿Cómo se implementa todo esto en un environment para Logic? Lo primero a resolver es cómo grabar esos datos y a qué resolución hacerlo. Es decir, en un compás, ¿cuántos eventos de automatización podremos grabar?, ¿y durante cuantos compases? No valen las respuestas como “a la máxima resolución” y “durante infinitos compases”. REQUIEM es un environment y cuenta con serias limitaciones… 8000 objetos (en la versión 5.5 de Logic, desconozco cual es ese limite en la versión actual) y un ancho de banda de proceso muy reducido (no pretendas procesar 200 streams de datos a través de 200 objetos de forma simultánea…)

Usando el elemento clave en cuanto a construcción de memorias en E-Code, el objeto Transformador, podemos memorizar 128 eventos de automatización. Eso nos podría valer para una resolución de 1/128, es decir, 128 eventos en cada compás. Pero si quiero poder grabar durante 100 compases, deberé usar 100 Transformadores. ¡Y esto sólo para un control en pantalla, imagina si deseamos automatizar 10 controles!

Lógicamente este método no nos vale, hay que reducir la resolución interna. Usando una resolución de 1/32, es decir, 32 eventos de automatización por compás, podemos usar un Transformador para memorizar 4 compases (4 x 32 = 128). Y encadenando más Transformadores, podemos cubrir fácilmente 500 compases. En este caso necesitaríamos 125 objetos Transformadores. Esos Transformadores deberían ir conmutándose entre sí, por ejemplo, al llegar al compás 5 sería el segundo Transformador el que actuaría, al llegar al compás 9, sería el tercero y así sucesivamente. Y lo mejor… se podrían empaquetar esos 125 Transformadores en un par de objetos Macro, convirtiéndolos en ¡2 únicos objetos!

¿Qué podríamos automatizar en REQUIEM?

La idea es poder grabar y reproducir cualquier control de síntesis o control de estado (eso es sencillo), pero lo difícil es hacerlo con todos simultáneamente: harían falta cientos de Macros como la anteriormente citada. Creo que lo mejor es ofrecer varias pistas de automatización, y que sea el usuario el que indique qué control grabará en cada una de ellas. Inicialmente la idea es probar con 4 pistas de 500 compases cada una, con una resolución de 1/32. Esto puede verse limitado por “todas las otras tareas de REQUIEM”, es decir, las 9 pistas de ritmos, las 8 pistas solistas, los LFOs y el manejo del interface de usuario… es decir, ¡el famoso ancho de banda!

Si el rendimiento fuera óptimo, probaría con 8 pistas de automatización (duplicando lo anterior). Con 8 pistas ya es posible efectuar buenas mezclas y efectos de producción. Por otro lado, el sistema de automatización no podría tener edición gráfica, y en caso de tener edición numérica (en forma de lista), su programación sería terriblemente compleja (debería extraer los datos grabados en cada Transformador según la posición de reproducción de la canción). Además, funciones tipo “Copy”, “Paste” serían realmente imposibles de lograr… ¿Cómo copiar un rango de datos de automatización que se ha grabado al final de un Transformador continuando en el inicio del siguiente? Creo que para tratarse de un environment, el simple hecho de poder grabar y reproducir, enmudecer, escalar o reducir la automatización ya es un logro, así que con eso ya me daría por satisfecho.

Como siempre, el tiempo dirá…

domingo, 28 de marzo de 2010

Sentido del ritmo II


Después de duras negociaciones con mi pobre antiguo Pentium 4, finalmente he podido grabar un vídeo con sonido y capturarlo todo en el mismo ordenador. Por suerte el driver ASIO de la tarjeta empleada, una E-MU 1820, permite el envío de audio al driver multimedia desde las entradas ASIO o físicas simultáneamente.

Dejando a un lado cuestiones técnicas, aquí tienes a REQUIEM trabajando para ti. El vídeo muestra la creación de una ritmo sencillo (bombo y platos) usando los pulsadores virtuales (PADs) en pantalla. Espero que te guste.
 

viernes, 26 de marzo de 2010

Tecnología obsoleta


A diferencia de lo habitual, REQUIEM está siendo desarrollado usando un ordenador arcaico con unas prestaciones ridículas en cuanto a velocidad y potencia. Esto garantiza que el código pueda “volar” en las máquinas de última generación. Aunque REQUIEM no ataca directamente a la CPU del ordenador, sí recarga el rendimiento del motor MIDI y audio de Logic con la consecuente carga en el driver ASIO del ordenador. Si a mi me funciona significa que funcionará en cualquier ordenador moderno.

Este principio tan “bello y noble” tiene una consecuencia negativa: estoy haciendo malabarismos para lograr tener a REQUIEM en reproducción mientras se graba el audio generado se envía simultáneamente al driver multimedia de Windows para que la aplicación de grabación de video en pantalla pueda capturar tanto la imagen como el sonido. Mi pobre PC está sufriendo… (Debo decir que aunque es una máquina muy antigua está configurada para arrancar con el 97% de recursos libres) Este es el motivo por el que hasta ahora no he publicado un vídeo con sonido.

En cuanto a REQUIEM, el motor de la sección “Drums Device” ha sido modificado con los buffers de copia de pista y copia de todo el patrón entero (“Phrase” en el argot de REQUIEM, esto es, copiar las 8 pistas simultáneamente). Además he añadido una función muy simple pero altamente útil: “Copy to next”. Esta función realiza una operación “Copy” del instrumento de percusión seleccionado (pista seleccionada en el “Drums Device”) en la “Phrase” seleccionada y pega el contenido copiado en la siguiente “Phrase” en el mismo instrumento seleccionado. Esto permite transferir pistas al patrón siguiente al actual, pudiendo crear variaciones del patrón en grabación con una sencilla operación.

Pero además estoy implementado esta misma operación a escala “Phrase”, es decir, copiando los 8 instrumentos simultáneamente a la “Phrase” siguiente a la actual. Así, al tener tu ritmo programado, podrás copiarlo al siguiente patrón y realizar modificaciones en el mismo. Luego podrás encadenarlos formando un ritmo más complejo con más compases de duración.

También he modificado el aspecto gráfico del interface de usuario. Ahora es más compacto provocando una menor confusión gráfica al mostrar tantos controles en pantalla.


Modo grabación en el "Drums Device"

Espero poder ofrecer un vídeo con sonido en breve...

domingo, 14 de marzo de 2010

Sentido del ritmo I


Fue ayer cuando di con la solución. No estaba frente al ordenador, estaba conduciendo. La solución me encontró a mi, y no yo a ella.

No he mostrado nada acerca de la caja de ritmos de REQUIEM porque sufría un curioso bug. El interface de usuario del “Drums Device” muestra las notas de cada instrumento seleccionado. Si seleccionamos “SD 1” mostrar los acentos de la pista de la caja 1. Si luego pulsamos “BD 2” mostrará los acentos del segundo bombo, dependiendo del patrón seleccionado. Pero esto no ocurría hasta ahora. A veces se mostraba el contenido correcto pero sonaban patrones distintos. Habiendo repasado el código cientos de veces, decidí hace semanas avanzar por otros caminos programando otras áreas de REQUIEM. Y el código no estaba mal, estaba bien escrito, lo que fallaba era la ruta de ejecución.

Esquema del código. Parte musical, sin síntesis de sonidos.

Código E-Code del dispositivo de ritmos. Parte musical, sin síntesis de sonidos.
Cada instrumento de la caja de ritmos tiene su propio botón tipo On / Off para poder apagarlo si es necesario. Técnicamente, “apagar” significa que el procesado de los objetos deja de funcionar (se corta) pero que el contenido se sigue viendo. El “corte” era lo que estaba mal, pues al deshabilitar parte del proceso del instrumento apagado, éste no podía actualizarse una vez se ponía de nuevo en marcha. Y como consecuencia sonaba el contenido antiguo, el existente antes de pulsar el botón “Off”. De modo que una vez arreglado, me complace presentarte la caja de ritmos de REQUIEM:

 
¡Hasta la próxima!

miércoles, 10 de marzo de 2010

¡Vaya pedazo de código!


Imagina que estas componiendo tu canción y quieres copiar los compases 5, 6, 7 y 8, en los compases  15, 16, 17 y 18 (por poner un ejemplo) Esto tan sencillo se vuelve arduamente complejo en E-Code.

La sección “Song” de REQUIEM opera sobre objetos transformadores a modo de matrices de memoria. Esta técnica es empleada en cualquier parte “memorizable” de REQUIEM, sólo que en esta ocasión la estructura es distinta. En un único objeto transformador se almacenan los 128 patrones que se reproducen en cada uno de los 128 compases. Por ejemplo, el compás 1 reproduce el patrón 54, el compás 2 el 13, el compás 3 el 120, etc…

Lo interesante es ofrecer funciones tipo copiar / pegar de modo que el usuario pueda copiar una sección de compases sobre otra sección de compases de la misma duración. Así pues, técnicamente hay que copiar parte de los 128 datos almacenados en el transformador, pasarlos a otro transformador a modo de almacén temporal, reubicar el puntero de memoria del primer transformador (del que hemos copiado los datos), y disparar los datos almacenados en el segundo transformador escribiéndolos en la posición actual del primero. Los datos existentes de esa porción quedarán eliminados y sustituidos por los nuevos.

El código E-Code para esta operación lo puedes ver en el siguiente vídeo. Actualmente la ejecución de este código provoca un bug gráfico en mi Logic 5.5, así que habrá que descubrir qué funciona mal, teniendo en cuenta que el código en sí funciona y efectúa todo lo narrado.

jueves, 4 de marzo de 2010

Yo grabo, tú grabas, él graba…


El procedimiento de grabación de notas en REQUIEM ya está listo e integrado en el GUI. Este es el resumen de su operatividad.

Al pulsar el botón “Rec” ocurre lo siguiente:
  1. Cambios gráficos en el interface de usuario con nuevos controles y colores distintos.
  2. Apertura del buffer de escritura: las memorias son rellenadas con nuevos datos.
  3. Bloqueo del modo “Pattern”: Los patrones no son encadenados pero si es posible conmutar de uno a otro manualmente.
  4. Bloqueo del acceso al “Phrase Editor” (el editor de eventos de REQUIEM)
  5. El teclado virtual muestra las notas entrantes, no las salientes. Se abre el acceso de la entrada de MIDI externo.
  6.  El contador de compases cambia mostrando información del paso (“Step”) editado actualmente. Se crea una copia de la información de compás previa para poder ser reclamada al abandonar el modo de grabación, restaurando así el valor del contador de compases.
  7. El visualizador de pasos (“Steps”) se sitúa en el “Step 1” mostrando lo que haya grabado.
La grabación en REQUIEM es bastante versátil. Como método de introducción el usuario puede usar el teclado virtual en pantalla o su teclado MIDI. Independientemente del modo de grabación (paso a paso o a tiempo real), el usuario puede indicar si se capturará el tono de las notas entrantes, su velocidad de pulsación o su duración. Esto se indica con los botones de la esquina inferior derecha “Note”, “Vel” y “Len”.

 
Modo Play

 
Modo Rec
Modos de grabación

La grabación puede ser a tiempo real o paso a paso. El modo de grabación lo define el estado del botón “Realtime”. Al activar el botón “Realtime” el usuario podrá tocar en tiempo real (siguiendo la claqueta) y REQUIEM grabará las notas en las 16 posiciones de nota (“Steps”). Las notas introducidas aparecerán en el teclado virtual superior y en los indicadores centrales sobre el transporte.

En el modo paso a paso es el usuario quien indica el “Step” en el que se grabará la nota, velocidad y duración de nota. Para ello puede usar el fader “Step” y los botones “<” y “>” del transporte. El indicador central “Step” mostrará el paso actual y a su lado aparecerá la información grabada en dicho paso. Si se desea eliminar una nota se procederá con el botón “| Delete |” de la esquina inferior derecha.

En la grabación paso a paso es posible grabar en modo “Stop” o en “Play”. Si se inicia la reproducción REQUIEM reproducirá la información grabada junto con las nuevas notas introducidas en sus pertinentes posiciones. Además existe una útil función tipo “Auto-Step” que permite pasar al paso siguiente al introducir la nota, ahorrando la pulsación del botón “>” cada vez. Esta función se activa con el botón “>>” y no tiene efecto en modo a tiempo real (“Realtime”)

Por último existe el botón “Chain” que en teoría debe encadenar las frases, así si un usuario quiere grabar de un tirón las frases 1, 2, 3, 4 y 5 (por ejemplo) puede hacerlo pulsando ese botón. De momento no se ha implementado esta función.

En modo “Pattern” la grabación varía. En este modo el usuario puede encadenar hasta 5 frases (“Phrases”) indicando las repeticiones que efectúa cada una de las frases. Al pasar a modo grabación, al pulsar “PlayREQUIEM no encadenará los patrones, sino que el usuario deberá usar los botones “<” y “>” de la sección “Pattern” para conmutar entre las distintas frases que conforman el patrón. Para reproducir el patrón de forma normal basta con pulsar “Rec” para abandonar el modo grabación.

La función de grabación se deshabilita automáticamente si el usuario cambia al dispositivo de ritmos “Drum Device”. Aunque es posible ir cambiando de dispositivo “Lead” en plena grabación y grabar todos los patrones necesarios de cada dispositivo sin tener que abandonar el modo grabación, esto no es así en el caso del dispositivo de ritmos. Se hace necesario abandonar la grabación debido a requerimientos del motor de ritmos de REQUIEM. Dicho de otra forma, problemas de diseño que no sé si lograré superar.


Por último, en el “Phrase Editor” la grabación se deshabilita (al pulsar “Rec” no ocurre nada). Esto es necesario ya que el propio “Phrase Editor” abre su puerta dedicada a la introducción de datos. Si además habilitamos la grabación son dos las puertas abiertas y se gestionan dos buffers de datos. Es demasiada complejidad para algo evidente: ¿se puede introducir y editar información en el “Phrase Editor”?... ¡Entonces para qué habilitar el modo grabación!

El procedimiento de grabación debe ser el mismo en el dispositivo de ritmos, así la experiencia del usuario podrá aprovecharse al instante. Evidentemente hay algún cambio significativo, pero la disposición de los controles será la misma.

Buenas noches… y buena suerte

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…

viernes, 15 de enero de 2010

4898 objetos y subiendo


Este es el estado actual de REQUIEM Environment:

Motor de dispositivos melódicos:

- Los 8 dispositivos ya suenan enviando las notas generadas por los patrones o cadenas de patrones a los correspondientes sintetizadores ES-M y ES-P (seleccionados en el GUI) La funcionalidad de duración de las notas aún no ha sido implementada. Las notas envían el tono y velocidad, pero no la duración.
- La monitorización en el picómetro opera conmutando el dispositivo melódico visualizado actualmente en el GUI.
- Las secciones de síntesis (ES-M / ES-P) y modulación de cada dispositivo están plenamente operativas: 128 memorias de sonidos para cada sintetizador y 128 memorias de modulaciones (4 fuentes x 4 destinos, 4 x profundidades de modulación, 4 x offsets de modulación) Cada sección cuenta con funciones copiar / pegar.
- Editor de eventos de dispositivos melódicos operando. Funciones de pre-visualización, Undo y proceso destructivo. Las notas pueden ser editadas en tono, velocidad, duración, posición (es posible desplazar las notas) y además permite edición por rango de notas (1/16, 1/8, etc) El editor de eventos cuenta con 20 memorias de usuario para almacenar los ajustes y ediciones deseadas.

Motor del dispositivo rítmico:

- Por diseñar. Como Logic 5.5.1 PC no tiene dispositivos de sonidos rítmicos (sólo el sampler EXS-24), he buscado sintetizadores de percusión VST freeware. HE encontrado dos candidatos sensacionales que ofrecen 8 sonidos simultáneamente y con no más de 6 parámetros por sonido. El usuario debería descargarlos (con enlaces proporcionados desde la documentación de REQUIEM) e instalarlos en la carpeta “VSTplugins” de Logic. NOTA: ¿y en Mac?


Contenido del menú "Edit" en la ventana "Synth Editor".

Motor modo Song (Multi-Scenes):

- Por diseñar

Motor de reconocimiento de acordes a tiempo real desde entrada MIDI:

- Diseño previo operando con resultados mejorables.

Motor de harmonización según acordes (X-Pose):

- Por diseñar, aunque los patrones ya incluyen ese parámetro.

Motor de exportación a pista de Logic:

- Por diseñar


Fallos y mejoras:

- Copia de memorias de edición “Edit Sets” en el editor de eventos.
- Copia de parámetros de síntesis: el dispositivo ES-P tiene 1 parámetro más que ES-M y la función copiar / pegar debe tenerlo en cuenta.
- Los parámetros transposición y velocidad de los dispositivos melódicos solo opera en modo “Pattern” y no en modo “Phrase”. Aunque esto es correcto, ocurrirá también que el “Pattern” seleccionado y no operativo recibirá esas modificaciones.
- Modos de grabación aún no implementados (a tiempo real vía MIDI y paso a paso vía MIDI)
- La selección del tipo de sintetizador debería actualizar el interface gráfico automáticamente. Sin embargo al hacerlo se produce un bucle de datos no resuelto.
- Pre-visualización en audio en el editor de eventos según el dispositivo seleccionado actualmente.
- Funciones “mute” y “solo” en los dispositivos melódicos, y “solo” en el editor de eventos.
- Función “Get Note from Scale” dependiente de la armonización generada.
- Proceso de “Scenes” no implementado (el contenedor que aúna los “Patterns”, “Synths”, “Mods” y “Efectos”, ligándolos a una nota MIDI o paso en Modo "Song")
- Efectos: aunque lo deseable sería parametrizarlos en memorias al igual que los ES-P y ES-M, temo el disparo masivo de los parámetros de edición de 4 efectos por dispositivo melódico (4 x 8). ¿Hace falta crear memorias Preset de efectos?


Ventana "Modulators".

GUI (interface gráfico de usuario)
  • Menús superiores operativos según ventanas finalizadas.

Ventanas finalizadas y operativas:

  • Ventana principal de edición de dispositivos melódicos finalizada y operando. (Synth Editor)
  • Ventana de edición de eventos operando. (Phrase Editor)
  • Ventana de moduladores (LFOs) operando. (Modulators) Falta implementar los "Circular LFO" y el "Arkanoid LFO" con sus funciones de copiar y pegar.

Ventanas en diseño:

  • Ventana del dispositivo rítmico en diseño inicial. (Rhythm Editor)
  • Mezclador. (Mixer)

Ventanas no diseñadas:

  • Editor de patrones rítmicos.(Rhythm Phrase Editor)
  • Editor de efectos.(Effects Editor)
  • Matriz de modulación. (Matrix Editor)
  • Ventana “Song” (Multi-Scenes)
  • Editor de arpegios.(Arp Editor)
  • Preferencias. (Preferences)


4898 objetos empleados hasta la fecha:



lunes, 4 de enero de 2010

E-Code Lección 1 – Área de trabajo


Antes de comenzar, hay que resaltar que es imprescindible conocer de forma muy profunda la naturaleza de los eventos MIDI. No me refiero a la conversión a binario o hexadecimal de los bytes que componen un evento MIDI, sino a saber exactamente qué es un evento de control, las diferencias entre aftertouch polifónico o de canal, que es un MSB y LSB, cómo se compone un evento de nota, y un largo etc. Afortunadamente en la red encontrarás mucha información al respecto.

Pero además también es indispensable la necesidad de dominar el Environment y sus objetos, pues será con ellos con los que armaremos nuestro querido dreamsynth (equipo de ensueño). En este caso también encontrarás bastante información en la red, aunque la más fiable siempre proviene del manual de Logic / Logic Pro. Yo comencé con esa documentación, lo cual indica que es perfectamente válida para cualquier usuario.


Límites del código:

Logic 5 permite el uso de poco más de 8000 objetos en el Environment. Ignoro si este límite se ha incrementado en las presentes versiones de Logic / Logic Pro. Como uso la versión 5 para Windows, ese será mi límite final: toda la funcionalidad de REQUIEM debe operar con 8000 objetos Environment. ¡No caben más!

La segunda limitación del Environment se refriere a su “ancho de banda”. Aunque es muy potente, el Environment no soporta muy bien el envío masivo de datos. Puedo procesar 20 eventos por una matriz de objetos simultáneamente, pero no centenares de ellos. Si creo 100 faders conectados a un mismo objeto disparador (trigger, el meta evento 99 con valor 0… ya hablaremos de ello, no te preocupes) el resultado al efectuar el disparo de valores de esos 100 faders no serán 100 disparos. Algunos “se perderán”, simplemente dejarán de operar no devolviendo ningún valor. ¿Cuántos funcionarán? Depende básicamente de todo: el equipo usado, la propia programación del Environment, el driver de audio empleado… ¡todo!

¿Cómo superar esos dos límites?

Para el primero hay una única solución posible: Macros. Se trata de empaquetar procesos secuenciales en un único objeto llamado Macro. Así, dónde antes habían 30 objetos ahora sólo habrá uno. Pero las Macros del Environment también tienen una limitación: soportan poco más de 100 objetos, y si estos son del tipo fader de texto todavía menos. Esto indica que los Macros están limitados por memoria, pueden caber 100 faders numéricos, pero no 100 faders de texto ya que éstos almacenan además de su propio valor 128 cadenas de texto asociados a cada valor, lo cual supera sustancialmente la memoria empleada por un simple fader que no sea de texto, que solo debe almacenar el valor actual. Por último, las Macros requieren de una entrada y una salida (una puerta de entrada y una salida). Pero por ellas pueden “pasar” múltiples tipos de datos simultáneamente o secuencialmente. Ya dedicaré un post extenso a las Macros, pues son la base de la programación en E-Code.

Ejemplo de Macro creado en el Environment. Consta de 32 objetos tipo fader numérico, con un transformador de entrada y salida.

El mismo Macro pero con 32 faders tipo texo (en vez de números podrían aparecer letras o cadenas de textos) Aquí Logic se queja, no es posible crear el Macro ya que este tipo de faders requiere más memoria. Lamentablemente, el Macro no podrá ser creado.

Para el segundo límite, el ancho de banda, también hay una única solución posible: secuenciar los procesos, es decir, que éstos no ocurran simultáneamente. En el ejemplo indicaba que no es posible disparar simultáneamente 100 faders y que el resultado de ese disparo será que algunos valores “se perderán”. Puede solucionarse insertando un objeto de retardo (Delay), ajustándolo a un retardo pequeño, insignificante. Cada grupo de 10 faders podría estar disparado con un retardo insertado, así lograríamos obtener losa 100 disparos y no se perdería información. Lamentablemente esto tiene un coste: el secuenciador de Logic necesita estar reproduciendo, es decir, el control “Play” pulsado y el reloj corriendo. Esto determina algo vital: REQUIEM sólo funcionará cuando Logic esté en reproducción. De otra forma, ¿cómo podría el Environment procesar datos en el tiempo sin tener un reloj corriendo?

Motor de patrones de REQUIEM. Como puedes ver hay varios objetos retardo (icono de reloj) que se encargan de establecer el orden de ejecución. Uno de ellos está seleccionado, puedes ver sus parámetros en la caja de parámetros de la izquierda. Observa que hay muchos objetos Macro, que son reconocibles gracias al borde de color oscuro de su alrededor.

Hay tres objetos básicos que requieren que Logic esté en reproducción / grabación (es decir, con el reloj corriendo):
  • El objeto retardo (Delay).
  • El objeto TouchTracks.
  • El objeto arpegiador.
En el caso del retardo, si le hemos indicado que deje pasar la señal original recibida por su entrada, ésta saldrá por la salida aunque el reloj de Logic esté detenido, pues es una señal que no va retardada. Pero los eventos duplicados por los retardos del objeto retardo sí requerían del reloj de Logic.

Y por último, aun nos queda un límite… ¡nosotros! Es imposible programar en E-Code si no se sabe programar conceptualmente, es decir, saber dividir cada tarea en unidades de proceso individuales. Dicho de otra forma: saber traducir lo que queremos lograr al lenguaje de objetos del Environment.

¡Anda… Ya estamos en 2010 y yo sigo rodeado de cables y transformadores…!

Buenos tiempos para todos…

Proceso de creación de un Macro. Lo que estás viendo es un LFO que permite dibujar la forma de onda y que la repite infinitas veces generando una modulación.
Como puedes ver todo el proceso envía el resultado a través del transformador "OUT" que actúa como puerta de salida.

Macro empaquetada: todos esos objetos han sido reducidos a un único objeto.

sábado, 2 de enero de 2010

La idea original


Hace varios meses pude juguetear con un sintetizador Korg Triton. Me encantaron las “Combis”, que son conjuntos de hasta 8 sonidos que pueden ser controlados a tiempo real con los diales y botones del panel de control y que usan además el potente sistema de arpegiadores integrado en el aparato. “Qué pena que deba comprar uno de estos para divertirme un rato…” Ese fue el pensamiento.


Una “Performance” (o "Combi") típica en cualquier sintetizador / workstation suele contar de varios generadores de sonidos que son disparados por arpegiadores, controlados por la interpretación del músico. Logic dispone de varios generadores de sonidos, no tan sofisticados como los de un sintetizador dedicado, pero que funcionan muy bien en cualquier tipo de música electrónica. También contamos con arpegiadores, muy simples pero que pueden mejorarse hasta donde la imaginación dicte. Y contamos con un potente entorno de programación, en el que residen los propios arpegiadores y generadores de sonidos: el Environment.

Ahora imaginemos un nuevo plug-in. Con este plug-in puedo grabar una frase de varios compases que es reproducida usando el sintetizador integrado en el propio plug-in. Además, puedo encadenar frases musicales formando estructuras más densas, y por si fuera poco puedo toar un acorde a tiempo real y el plug-in corregirá las notas para adaptarse a la nueva escala. Este plug-in incluye extensas modulaciones, así puedo crear barridos de filtros automáticos, usar datos de velocidad de pulsación para controlar el panorama y otras sofisticaciones varias.

Ahora supongamos que este plug-in en realidad no tiene un único secuenciador de frases, sino 8 secuenciadores. Y cada uno de ellos dispara su propio sintetizador. Además cuenta con una sección de patrones rítmicos, creando la “groovebox” definitiva. Al más alto nivel, es posible grabar secuencialmente los cambios de patrones y sonidos, o incluso asignarlos a teclas para ser disparados al pulsar el número de nota MIDI correspondiente. Esto sería muy apetecible en actuaciones en directo.

Y otro detalle más… el plug-in cuenta con algo de inteligencia propia: puede auto-componer líneas partiendo de acordes y un asistente de composición musical.

Todo esto puede lograrse con el Environment, aunque no es una programación sencilla. Sería un Environment con varios miles de objetos, pero dichos objetos ya no serían meros objetos del Environment, sino proyecciones de un lenguaje de programación nuevo, divertido y muy potente (a nivel musical). Lo llamo E-Code y es otra forma de “ver” a los objetos del Environment y sobretodo de comprender cómo interactúan entre ellos.

Interface de usuario del Environment SOPHY

Aunque me resulta imposible relatar la función de cada nuevo objeto añadido al proyecto REQUIEM Environment, trataré de ilustrar los bloques básicos de su programación, el porqué de cada decisión tomada y las consecuencias a nivel de programación. Para ello primero deberé abordar varias cuestiones genéricas del concepto de programación E-Code. Aunque quizás suene aburrido será imprescindible para poder avanzar en la compresión del sistema de programación empleado.

Parte del motor de secuenciación del Environment SOPHY

jueves, 31 de diciembre de 2009

¿Qué es REQUIEM Environment?


Cualquier producto que no pueda ser definido en pocas palabras es un mal producto (comercialmente hablando) así que voy a tratar de hacerlo lo mejor posible.

REQUIEM es una groovebox interactiva programada completamente usando objetos del Environment.

Ampliando la definición anterior, REQUIEM no es un sencillo secuenciador conectado a un sintetizador, sino que es una completa estación de trabajo rítmica y melódica para generar paisajes sonoros tipo chill-out o complejas atmósferas sintéticas repletas de movimiento.

Su estructura consta de 8 partes melódicas (8 pistas) y 1 parte rítmica (con 8 pistas más). Cada parte melódica (o sintética, si así lo prefieres) consta de un sintetizador independiente con una sección de síntesis completa con 128 memorias Preset, una sección de modulación con 4 fuentes y 4 destinos (también gestionada por 128 memorias Preset, una sección de efectos con 128 memorias Preset y una sección de patrones con 128 memorias para patrones. El sintetizador puede ser seleccionado por el usuario: un ES-P o un ES-M.

La sección de patrones consta de 5 pasos en los que es posible definir qué frase musical va a sonar (de 128 que pueden ser grabadas por el usuario) y cuantas veces se repetirá antes de proceder con el patrón del siguiente paso. Cada frase consta de una resolución de 1/16, y almacena los números de nota, velocidades de pulsación y duraciones de nota. Es posible grabar las frases a tempo real tocando desde el teclado, paso-a-paso vía MIDI, o en pantalla con el interface de usuario.

Todas estas secciones con memorias conforman una Scene. Cuando el usuario selecciona una Scene (de 128 existentes en cada parte melódica), automáticamente se selecciona el preset de sonido, preset de modulación asignado, preset de efectos y preset de patrones. Las Scenes se pueden encadenar en el modo Song o alternativamente ser disparadas vía notas MIDI (para interpretaciones en directo). Además cada Scene selecciona la configuración de los moduladores, formada por 6 LFOs “normales”, 2 LFOs circulares y algo llamado Arkanoid LFO (una paranoia que genera modulaciones partiendo de los rebotes de una pelota virtual en una sala virtual).

Cada Scene puede ser transportada musicalmente siguiendo el tono de la pista de acordes, o a tiempo real mediante el motor reconocimiento de acordes de REQUIEM (al más puro estilo “Casiotone”, este motor aun está en fase previa y con varios problemas graves que deben solucionarse, como la latencia generada)

Técnicamente REQUIEM emplea dos capas de datos: los datos reales que son enviados a los sintetizadores de cada parte y los datos mostrados al usuario en el interface de usuario (GUI). Este segundo flujo de datos va retrasado expresamente respecto al primero para no generar retardos en la señal real, El retardo es mínimo e imperceptible para el usuario, y sólo afecta a los datos visuales.

NOTA: La parte rítmica todavía no ha sido desarrollada, pero constará de 128 patrones con 8 pistas y una resolución de 1/32.


Estado del proyecto

Actualmente hay programada la parte melódica con todo el interface de usuario funcionando y en estado de pruebas. Desafortunadamente hay varios problemas de visualización que voy resolviendo uno a uno.

miércoles, 30 de diciembre de 2009

¡Bienvenido a este rincón de sabiduría Lógica!


Si has llegado hasta aquí posiblemente sea por una de estas tres posibilidades:
  1. Eres usuario de Logic / Logic Pro y odias el Environment (¡me niego a llamarlo “Entorno”!)
  2. Eres usuario de Logic / Logic Pro y te encanta el Environment (sigo negándome a llamarlo “Entorno”…)
  3. Te has perdido completamente entre las olas del océano binario de la red…


Este blog no será una masterclass de Environment, sino que expondré la creación de un mega-Environment de programación muy avanzada (macros, alias, metas y otras cosillas muy simpáticas…) Mis tiempos de “doctor especializado” acabaron cuando mis obras circularon impunemente por las peer-to-peer y dejé de poder ganarme la vida vendiendo mis conocimientos (y con perdón, que no son pocos…)

Pero seamos positivos, ¡he vuelto! Dejé de programar Environments hace más de 4 años. Gracias a una buena terapia de grupo tipo “freakys unidos jamás serán vencidos” he decidido acabar lo que comencé, y no sólo esto, sino continuar mucho más allá. Lo genial de este mundo es que da cabida para todo tipo de locuras: creer que la Tierra sigue siendo un disco plano (efectivamente, y con foro incluido para debatir acerca de ello) o programar aplicaciones musicales usando el Environment. Observa que empleo el vocablo “aplicaciones”, esto es programas completamente funcionales usando únicamente el Environment, y cuyo resultado musical puede exportarse al secuenciador de Logic en tiempo real.

(Nota mental: “no me cree… deberás mostrarle algo…”)


Ok, hablemos de ello. El primer gráfico pertenece a SOPHY, mi niña bonita. Básicamente es un secuenciador de 8 pistas melódicas y 8 pistas rítmicas, cada una de ellas con 128 patrones (cuyos datos se almacenan en el Environment, no en Logic), con modo canción, 8 LFOs asignables, modulación interna, funciones de edición (copiar, pegar patrones, etc…), exportación a Logic y un montón de prestaciones más (128 presets de parámetros de síntesis para cada pista, mezclador con 128 escenas, etc…) Es del año 2002 (madre mía cómo pasa el tiempo) y tuve el placer de mostrárselo directamente a Gerhard Lengeling de Emagic en su propia sede. ¡8000 objetos!


Este segundo gráfico es el proyecto MOODY, un “Environment-dentro del-Environment”. Se trata de un conjunto de más de 70 módulos altamente funcionales para la creación de un sintetizador modular tipo groove-box, integrando distinto hardware externo como si fuera una única entidad. LFOs con memorias, secuenciadores con 128 patrones, generadores de rampas en los que puedes dibujar tus propias curvas, transformaciones, controles remotos, monitores… todo en formato Macro.


El tercer gráfico no es un proyecto, sino un experimento. Quise crear el genial interface gráfico del desaparecido Rebirth (Propellerhedas) en forma de Environment. El resultado es cuanto menos curioso, pero más allá no hay nada más: ni motor de datos ni interacción con el usuario.


¿Qué es una “aplicación musical completa diseñada únicamente el Environment”?

Afortunadamente todavía quedan usuarios con inquietudes a los que el Environment les susurra. Hay excelentes ejemplos de lo que es capaz de ofrecer esta mágica ventana a la programación que nos ofrece Logic. En el proyecto REQUIEM Environment las características especiales que le otorgan el estado de “aplicación musical completa” son las siguientes:

  • Interface de usuario: Contiene menús superiores como los de cualquier aplicación, con funciones de copiar, cortar y pegar para cada área de la aplicación. La visualización de los valores de los parámetros es dinámica, empleando unas pocas pantallas. La ruta de los eventos es independiente para “lo que está sonando” y para “lo que se está viendo”, es decir, hay dos capas de programación que interactúan: la que soporta los datos reales salientes de la programación y la ruta con la representación visual de esos datos para el usuario.
  • Memoria interna!: REQUIEM almacena todos los datos en los objetos que lo conforman por lo que Logic es usado tan sólo como reloj. La capacidad de memoria de REQUIEM es asombrosa: 128 patrones de 16 notas cada uno (con velocidades y duraciones) + 128 memorias de parámetros de síntesis (para sintetizadores ES-E / ES-M / ES-P) + 128 memorias de efectos (5 plug-ins con todos sus parámetros) + 128 memorias de modulaciones (matriz de 4 destinos de modulación con ancho de banda de modulación y corrección de modulación), todo ello multiplicado por 8. Dicho de otra forma, cada uno de los 8 dispositivos virtuales de REQUIEM almacena todo lo anterior.
  • La experiencia de uso debe ser tan sólida como la de cualquier aplicación: el objetivo es lograr que el usuario olvide que está usando un Environment.


¿Es posible lograrlo?...

Por cierto, sigo usando Logic 5.5 (con licencia y su XS Key, por supuesto) en versión Windows. No he cambiado a Mac para poder usar el flamante Logic Pro 9. Los motivos son varios, posiblemente algún día los comente. Digo esto porque los gráficos que verás son de la versión Logic 5.5.1 PC.

¡Larga vida al Environment!

(Hasta la próxima amigo…)