RTSPA1: Espacialización en tiempo real

Prof. Oscar Pablo Di Liscia, 4 / 8 / 98

odiliscia@unq.edu.ar

1 - Generalidades:

    Este programa -entre otros- fué realizado en el marco de los proyectos de investigación: Diseño y aplicación de filtros digitales para la producción de reverberación artificial (Investigación de Cátedra, Computación Aplicada a la Música, 1995-96, Universidad Nacional de Quilmes) y Espacialización de sonido y música (Investigación de Cátedra, Computación Aplicada a la Música, Composición Con Medios Electroacústicos, 1996-97, Universidad Nacional de Quilmes). Es de libre copia, uso y distribución.

RTSPA1 es un programa que permite controlar en tiempo real, vía MIDI, al Software y Hardware Session8, con el objeto de proveer localización de sonido.

También es posible usarlo con el programa Csound, o cualquier programa o dispositivo que lea valores de controladores MIDI y los asigne a controles de ganancia de varios canales de salida de audio.

La primera versión fué usada en el estreno del espectáculo dramático-musical "EL HECHO" , del compositor Oscar Edelstein (estrenado en "La Trastienda", Buenos Aires, Julio, 1998) para espacializar en tiempo real la voz de la Srta. Paula Ortega, una de las protagonistas de la obra ("voz de paz").

RTSPA utiliza la capacidad de control de los objetos de pantalla del mezclador de audio digital del Software Session8, a través de órdenes MIDI de controlador. El Software Session8  provee un archivo (midimap.txt) en el que se indica el número de controlador MIDI y el objeto de pantalla a él asociado. Por ejemplo, el Fader del canal 1 del mezclador está asociado al controlador 0, enviando órdenes del controlador 0, en un rango de 0 a 127 (7 bits de resolución, lamentablemente...) se desliza dicho fader, cambiando la amplitud de la señal que se esté reproduciendo.

Resulta entonces sencillo calcular la ganancia de cuatro canales para proveer escalamiento de amplitud de una señal a reproducir, con respecto al ángulo (acimut) y distancia de la fuente virtual que se desee emular.

Con la finalidad de producir un efecto más contundente de profundidad, la copia del sonido directo, sin el escalamiento de ganancia, fué enviada a una cámara de reverberación, y la salida de esta ("wet") fué mezclada en los cuatro canales de salida. De esta manera, a medida que la distancia cambia, el directo ("dry") se altera mientras que (como es normal) la reverberación resulta constante.

El siguiente diagrama ilustra la conexión de audio que se usó:

2 - Funcionamiento de RTSPA1

RTSPA1 asume que el oyente está situado en el origen de un plano cartesiano y rodeado de 4 parlantes equidistantes en ángulos de 45, 135, 225 y 315 grados.

En la figura siguiente se observa una pantalla de RTSPA1 con números entre paréntesis para cada objeto de pantalla. Sigue una breve explicación sobre la función de cada uno de ellos:

(1) Si esta caja está sin chequear, el programa funciona, pero no envía ninguna orden MIDI.

(2) Con esta scrollbar se decide por qué canal MIDI se envían las órdenes al Session. Recordar que hay que disponer el mismo canal en el software (Menú MIDI setup / Automation).

(3) Aquí se selecciona el puerto MIDI por el cual se envían las órdenes. Recordar que hay que disponer el mismo puerto en el software Session (Menú MIDI setup / Automation).

(4) Aquí se determinan los números de controlador para los 4 faders, más 2 controladores que se pueden utilizar para mover el Master (sólo en modo Internal Mix para usar stéreo) o cualquier otra cosa (ver 7).

La distribución por defecto, con las asignaciones de controladores:

front left front right master ch1
control #1 control #0 control #8
rear left rear right master ch2
control #2 control #3 control #9

Nótese que se podría usar RTSPA1 para controlar cualquier mezcladora digital que recibiera órdenes de controladores MIDI. Sólo habría que poner los números de control correctos. De hecho, en el apéndice 1 se explica cómo usarlo junto con el programa Csound.

(5) Esta scrollbar modifica el ángulo de la fuente virtual respecto del oyente. El ángulo se indica en grados, en forma anti-horaria, siendo 0=360, a la derecha del origen. Se actualiza sola para el caso de un movimiento automático.

(6) Esta scrollbar modifica la distancia de la fuente virtual respecto del oyente: esto es, multiplica el valor de ganancia de cada canal por 128 - (V+1), en donde V es el valor actual de distancia. El número resultante de la multiplicación (truncado a entero sin signo, de 7 bits) es el data byte del controlador correspondiente. No está planteada una correlación exacta entre su valor y un valor de distancia en metros.

(7) Esta scrollbar modifica simultáneamente el valor de los data bytes de los números de controlador para los Masters Faders, columna de la izquierda, y envía las dos órdenes MIDI correspondientes. Puede prescindirse de ella en el caso de salida cuadrafónica (en el modo External Mix del Session, no existen -como es lógico- los Master Faders).

(8) Panel de presets de espacialización: este panel provee algunos presets de espacialización. Dado que el programa fué pensado para usarse "en vivo", el mouse no es un controlador muy versátil para esa tarea, se trataba pues de conseguir un cierto grado de control y un cierto grado de automatización.

Este panel tiene 12 botones que disparan presets: los cuatro más cerca del centro (con etiquetas 1-2, 2-3, 3-4 y 4-1) inician movimiento alternado de la fuente entre los canales designados. Por ejemplo, el botón 1-2 inicia movimiento alterno entre los dos parlantes del frente. Apretando nuevamente el mismo botón, se detiene la automatización.

Es posible mover simultáneamente la scrollbar de "distancia", logrando con ello movimiento en zig-zag lejos/cerca y viceversa.

Los ocho botones externos (etiquetados 1 - FR - 2 - LE - 3 - RE - 4 - RI ) proveen localización fija "por salto" (de manera similar a los "sonidos volantes" de K. Stockhausen en Kontakte), de la siguiente manera: al presionar cualquiera de ellos se inicia un fadeout automático, al llegar a amplitud 0 (distancia=127), se modifica el ángulo de acuerdo con la posición indicada y se inicia un fadein automático hasta el punto de distancia que existía antes.

(9) Con este botón se inicia movimiento automático circular. Al presionarlo nuevamente se detiene. Es posible mover la scrollbar de distancia gradualmente y producir así movimiento en espiral (un círculo al que se le modifica progresivamente el radio).

(10) Esta scrollbar determina el "tamaño del incremento" de los valores en todos los movimientos automáticos (ya sea que involucren ángulo o distancia), produciendo, por consiguiente, diferente velocidad en los mismos. Tiene un rango de 1 a 10. Debe tenerse cuidado con los valores altos, dado que, en señales muy continuas y de espectro uniforme, tienden a producir clicks, por los saltos bruscos de amplitud. Es posible alterar de manera contínua este parámetro con un preset de automatización funcionando, con lo que se consiguen variaciones de velocidad.

A pesar de que este procedimiento es una solución simple del problema (dado que no maneja tiempo absoluto y dependerá de las capacidades de la PC utilizada), es menos riesgoso. La generación de eventos periódicos en Windows es una cuestión de prioridades: este procedimiento le deja al sistema operativo elegir el momento apropiado para generar un evento periódico, con un procedimiento diferente (Timer), se forzaría al sistema a generar el evento, aumentando el riesgo de interrupciones de audio.

(11) Esta scrollbar permite el cambio de dirección (antihoraria - horaria), sólo afecta al preset de movimiento circular.

(12) Este botón envía una orden MIDI de "note on" (C5, KV=127), o bien (si ya ha sido disparada previamente) una orden de "note off" (C5, KV=0) al puerto seleccionado. Fué agregado para activar/desactivar un instrumento de Csound, si es que se usa este programa en vez del Hardware y Software Session8 para espacializar.

3 - Cómo empezar, usando Session8 y Rtspa1

En el software y hardware Session:

a - Poner el software Session en modo External Mix

b - Poner en Record (botón rojo) cuatro canales de audio.

c - Establecer el out de cada uno de los canales, asegurándose de que las conexiones de audio del Hardware Session8 correspondan con el diagrama de canales correcto.

d - Establecer el input de los cuatro canales del software session para el canal de input del Hardware Session8, en donde deberá ingresar la señal (mono) a espacializar.

e - Establecer Puerto y Canal MIDI de recepción en el software Session (Menú de MIDI Setup / Automation)

f - Colocar los Panpots de los cuatro canales a derecha o izquierda, de acuerdo con las asignaciones de salida.

En el software RTSPA1:

a - Chequear el casillero de Enviar.

b - Elegir Puerto y Canal MIDI de envío (deben coincidir con los indicados anteriormente en el software Session).

c - Disponer los números de controladores MIDI para los respectivos faders de acuerdo con los indicados anteriormente en el software Session.

Pantalla del Software RTSPA1

(1)El Software y Hardware Session8 son productos registrados de Digidesign.

4 - Uso de múltiples instancias de RTSPA1

Es perfectamente posible abrir más de una instancia de RTSPA1 (típicamente una más, para controlar los otros cuatro canales del Session8). Los pasos a seguir son exactamente iguales que los anteriores, sólo que deberán cambiarse los números de controladores. El puerto de envío deberá ser el mismo en las dos instancias, y esto suele causar problemas con algunos puertos MIDI virtuales: concretamente algunos de ellos generan un mensaje de error, dado que no son aptos para una multi-apertura Sin embargo, por suerte, existen drivers (puertos MIDI virtuales) muy robustos y que soportan aperturas múltiples desde diferentes programas.

Una buena idea es espacializar dos copias diferentes de la misma señal de entrada, a través de dos instancias diferentes de RTSPA1, pero, aprovechando los filtros en tiempo real del Session8, ecualizar las dos copias de manera sensiblemente diferente: si se crean, a partir de la ecualización, dos espectros complementarios, el efecto es sorprendente.

Apéndice 1: Cómo usar RTSPA1 con Csound en tiempo real.

El programa Csound (Barry Vercoe, Media Lab del M.I.T.) es un compilador de señal digital con capacidades de operación en tiempo real. Por supuesto, sus posibilidades dependen en gran medida de la eficiencia del sistema operativo y hardware usado, pero en la actualidad es posible obtener un rendimiento aceptable con una Pentium 133 Mhz o superior. Se asume en este apéndice el conocimiento por parte del usuario de Csound.

Básicamente el procedimiento de uso es el mismo que el anterior, sólo que el procesamiento de audio en tiempo real es realizado por Csound. A continuación se expone un modelo simple de orquesta y partitura de Csound para estos propósitos.

Primero la orquesta:

/**********************************************************************/

;rt1.orc

sr =44100 ;este es el header

kr =441

ksmps =100

nchnls=4

 

instr 1 ;el instrumento espacializador

 

ifac =1./127. ;factor para normalizar valores ;en el rango 0-127

 

kch1 midictrl 0,0 ;el canal 1 lee el control 0

ach1 interp kch1 ;se interpolan los valores para ;evitar clicks

 

kch2 midictrl 1,0 ;el canal 2 lee el control 1

ach2 interp kch2 ;ditto...

 

kch3 midictrl 2,0 ;el canal 3 lee el control 2

ach3 interp kch3 ;ditto...

 

kch4 midictrl 3,0 ;el canal 4 lee el control 3

ach4 interp kch4 ;ditto...

 

asig in ;la señal de entrada es tomada ;del in del dispositivo de audio ;asignado

asig=asig*ifac ;multiplicar aquí evita 3 ;multiplicaciones innecesarias

 

arev reverb2 asig*.1,2,.9

;una copia reducida del directo ;se envía al reverberador

 

arev tone arev,4000 ;se filtra la reverberación

outq (asig*ach1)+arev, ;la salida mezcla el directo

(asig*ach2)+arev, ;con la reverberación

(asig*ach3)+arev,

(asig*ach4)+arev

 

endin

/**********************************************************************/

La partitura es muy simple:

/**********************************************************************/

;rt1.sco

f0 600

;esto le indica a Csound que debe estar activo por 10 minutos (600 segs.)

/**********************************************************************/

Algunos comentarios sobre la orquesta:

a)Los valores que se reciben están, como ya se comentó, en un rango de 0-127 (7 bits de resolución). Esto puede generar clicks indeseables, sobre todo si la fuente virtual se mueve muy rápidamente. En Csound este problema se puede sobrellevar fácilmente, al usar el generador interp, que transforma una señal de rango K en una de rango A, obteniendo los valores intermedios por interpolación lineal. Por supuesto, otros métodos de interpolación más complejos serían posibles, pero consumirían más tiempo de procesamiento para un resultado práctico no demasiado diferente.

b)El instrumento es muy simple, los indicios de localización que usa son: 1-Escalamiento de amplitud en cuatro canales, de acuerdo con el ángulo y la distancia de la fuente virtual al oyente, y 2-Proporción entre reverberación densa (a través de la unidad reverb2) y directo, de acuerdo con la distancia de la fuente virtual al oyente.

La reverberación densa es filtrada con un filtro pasa - bajos IIR de un polo (tone), con el objeto de diferenciar aun más a ésta del directo. Esto es útil cuando la fuente se encuentra muy lejos del oyente y, a causa de su baja ganancia, el directo corre el riesgo de ser enmascarado por la reverberación. El valor de la frecuencia de corte del filtro (4000 Hz) fué elegido arbitrariamente, puede experimentarse con otros valores e, inclusive otros filtros (los filtros Butterworth de Csound proveen una pendiente de corte más neta).

Sería posible usar otros indicios, si la velocidad de la computadora usada fuera suficiente (en la actualidad ésta implementación corre normalmente en mi modesta Pentium 133 Mhz, con 32 Mb de RAM, a la fecha de esta documentación). Para ello también sería necesario que RTSPA1 enviara a Csound la ubicación de la fuente virtual, en vez que la ganancia para los cuatro parlantes. Estoy trabajando en el agregado de un switch para RTSPA1, que permita el envío de valores de posición de la fuente (en coordenadas rectangulares o polares), en vez de (o junto con...) valores de ganancia. Si éste fuera el caso, se podrían calcular los valores de retraso (delay) y ganancia de los primeros ecos, de acuerdo con la geometría del recinto virtual y emularlos.. También sería posible emular el efecto Doppler, teniendo en cuenta la velocidad relativa entre la fuente sonora y el oyente e implementarlo a través de la unidad vdelay (que realiza una línea de delay variable en el tiempo) . Finalmente, sería también posible calcular la Diferencia Interaural de Tiempo, o sea, el diferente retraso con que la señal llega a los diferentes oídos, y sumar ése retraso al del directo, en los distintos canales.

La línea de comando a ejecutar es la siguiente:

CSOUND.EXE -o dac -d C:\CSOUND\RT1.ORC C:\CSOUND\RT1.SCO

-M sbmidi

Al ejecutarla, Csound comenzará a esperar eventos MIDI para procesar. Los eventos serán leídos del puerto MIDI que se especifique cuando Csound lo requiera y serán enviados por RTSPA1. Sin embargo, debe enviarse una orden de Key On, para que el instrumento de Csound se active: esto se hace desde RTSPA1 con el botón etiquetado con NOTE ON . Para desactivar el instrumento, basta apretar el botón nuevamente (se envía una orden de Key Off). La señal de audio para procesar debe entrar por el IN del dispositivo de audio. Este debe ser FULL DUAL, esto es, debe permitir la reprodución y grabación simultánea.

El flag -o DAC, indica a Csound que su salida debe direccionarse al dispositivo de audio standard. Si hubiera más de uno, Csound, requerirá una elección por parte del usuario. Un problema, hasta ahora insoluble con las tarjetas de sonido que se usaron, es que los drivers de aquellas que son cuadrafónicas u octofónicas las manejan como si estas fueran una combinación de varios dispositivos stereo. Esto parece ser una seria limitación del MCI de Windows. Ya que Csound sólo permite abrir un sólo dispositivo de audio para su salida, no se pueden usar más de 2 canales. Este problema puede ser resuelto de la siguiente forma:

a)Escribiendo (Dios nos asista...) o consiguiendo un driver para el dispositivo de audio en cuestión.

b)Corrigiendo el problema en Csound, al realizar una versión que permita la apertura y escritura de audio en varios dispositivos.

De momento no he llegado a hacer ni una cosa, ni la otra. Pero espero resolverlo pronto.

 

Prof. Oscar Pablo Di Liscia

odiliscia@unq.edu.ar