|
Funciones 3D Sound (Csound)
Estas funciones se han extraído de los manuales de referencia del Csound, los añadimos aquí, como pequeña guía. No obstante siempre conviente tener el manual a mano.
hrtfer
aLeft, aRight hrtfer asig, kAz, kElev, “HRTFcompact”
DESCRIPCIÓN
La salida es audio tridimensional estéreo.
INICIALIZACIÓN
kAz - valor azimutal en grados. Los valores positivos representan las posiciones a la derecha, los negativos a la izquierda.
kElev - valor de elevación en grados. Los valores positivos representan posiciones por encima de la horizontal, los negativos por debajo.
En el presente, el único fichero que puede ser usado con hrtfer es HRTFcompact. Debe ser pasado al opcode como último argumento entre comillas como se muestra arriba.
HRTFcompact puede ser obtenido en:
ftp://ftp.maths.bath.ac.uk/pub/dream/utilities/Analysis/HRTFcompact
EJECUCIÓN
Estos opcodes colocan una señal mono en un espacio virtual tridimensional alrededor del oyente, realizando un proceso de convolución de la entrada con los datos HRTF apropiados, especificados por los valores de azimut y de elevación del opcode. hrtfer permite que estos valores sean de tipo -k, lo que permite una espacialización dinámica variable a frecuencia de control. hrtfer sólo puede colocar su entrada en una posición requerida, porque el HRTF se carga en la inicialización (recuerda que actualmente
Csound tiene un límite de 20 ficheros en memoria, de otra manera causa un error de segmentación). La salida necesitará ser escalada bien con balance, bien multiplicándola por alguna constante.
Nota - la frecuencia de muestreo de la orquesta debe ser 44.1 hHz. Esto es así porque los HRTFs fueron medidos a dicha frecuencia de muestreo. Para ser usados a una frecuencia diferente, los HRTFs deben ser resampleados a la frecuencia deseada.
locsig, locsend
a1, a2 locsig asig, kdegree, kdistance, kreverbsend
a1, a2, a3, a4 locsig asig, kdegree, kdistance, kreverbsend
a1, a2 locsend
a1, a2, a3, a4 locsend
DESCRIPCIÓN
locsig : toma una señal de entrada y la distribuye entre 2 o 4 canales, usando valores en grados para calcular el balance entre canales adyacentes. También toma un parámetro para la distancia (usado para atenuar señales que deberían sonar como si estuvieran más lejos que el altavoz mismo), y otro para la cantidad de señal que se enviará a los reverberadores. Esta unidad esta basada en el ejemplo del libro Computer Music,página 320, de Charles Dodge/Thomas Jerse. locsend depende de la existencia de una unidad locsig previamente definida. El número de señales de salida debe coincidir con el número de la unidad locsig anterior. Las señales de salida de locsend se derivan de los valores dados para la distancia y la reverberación en locsig y están listos para ser enviados alas unidades de reverberación locales o globales (ver el ejemplo más abajo). La cantidad de reverberación y balance entre los 2 o 4 canales se calcula de la misma manera que se describe en el libro mencionado (un libro esencial!).
EJECUCIÓN
kdegree - valor entre 0 y 360 para la localización de la señal en un espacio de 2 o 4 canales configurados como: a1=0, a2=90, a3=180, a4=270 (por ejemplo kdegree = 45 balancearía la señal equitativamente entrea1 y a2). locsig pasa kdegree a funciones seno y coseno para calcular el balance de la señal (por ejemplo:
asig=1, kdegree=45, a1=a2=.707).
kdistance - valor (mayor o igual que 1) usado para atenuar la señal y calcular el nivel de reverberación con el fin de simular las indicaciones de distancia. Al hacer kdistance mayor, el sonido se hará más suave y de alguna manera más reverberante (asumiendo que se use locsend en este caso).
kreverbsend - porcentaje de la señal directa que será procesada junto con los valores de distancia y localización para obtener la cantidad de señal que será enviada a la unidad de reverberación, por ejemplo reverb o reverb2 .
space, spsend, spdist
a1, a2, a3, a4 space asig, ifn, ktime, kreverbsend [,kx, ky]
a1, a2, a3, a4 spsend
k1 spdist ifn, ktime, [,kx, ky]
DESCRIPCIÓN
space toma una señal de entrada y la distribuye entre 4 canales usando coordenadas cartesianas xy para calcular el balance de las salidas. Las coordenadas xy pueden ser definidas en un fichero de texto separado y accedidas a través de una función de la partitura usando GEN28 , o pueden ser especificadas usando los argumentos opcionales kx y ky . Hay algunas ventajas en usar el primer método:
1. se puede usar una interfaz gráfica para dibujar y editar trayectorias en el plano cartesiano;
2. el formato del fichero está en la forma "tiempo1 X1 Y1 tiempo2 X2 Y2 tiempo3 X3 Y3",
permitiendo al usuario definir una trayectoria propia en el tiempo.
space permite al usuario especificar un puntero temporal (como los usados en pvoc, lpread y otras unidades) para conseguir un control preciso sobre la velocidad final del movimiento.
spsend depende de la existencia de una unidad space previamente definida. Las señales de salida de spsend se derivan de los valores dados a XY y a reverb en la unidad space y están listas para ser enviadas a una unidad local o global de reverberación (ver el ejemplo de abajo).
spdist usa los mismos datos xy que space , también desde un fichero de texto usando GEN28 o directamente desde los argumentos kx y ky de la unidad. El propósito de esta unidad es hacer disponible los valores de distancia que se calculan a partir de las coordenadas xy. En el caso de space, los valores xy se usan para determinar una distancia que es usada para at e nuar la señal y prepararla para su uso con spsend . Pero es también útil para tener esos valores de distancia disponibles para escalar la frecuencia de la señal antes de enviarla a la unidad space .
EJECUCIÓN
La configuración de las coordenadas xy en space coloca la señal en los altavoces (a n ) de la siguiente manera: a1 es (-1,1); a2 es (1, 1); a3 es (-1, -1); a4 es (1, -1). Esto asume que un altavoz configurado como a1 está delante a la izquierda, a2 está delante en la derecha, a3 atrás a la izquierda y a4está atrás a la derecha. Los valores mayores que 1 darán lugar a sonidos atenuados como si estuvieran a distancia. space considera que los altavoces están a una distancia 1. Pueden usarse valores más pequeños que 1 para coordenadas xy, pero space no amplificará la señal en ese caso. Sin embargo, balanceará la señal para que pueda sonar como si estuviera entre el espacio de los cuatro altavoces. x=0, y=1, colocarán la señal igualmente balanceada entre los canales delanteros izquierdo y derecho; x=y=0 colocarán la señal en medio de los cuatro altavoces, etc. Aunque debe haber 4 señales de salida en space , éste puede ser
usado en una orquesta con sólo 2 canales. Si las coordenadas se mantienen para que y sea siempre mayor o igual que 1, se puede mover o fijar sonidos en un campo estéreo sin problemas.
ifn - número de la función almacenada creada con GEN28 . Este generador de función lee un fichero de texto que contiene las series de tres valores que representan las coordenadas xy y una etiqueta de tiempo que indica el instante en el que será colocada la señal en esa posición en el espacio. El fichero debe ser de esta forma:
0 -1 1
1 1 1
2 4 4
2.1 -4 -4
3 10 -10
5 -40 0
si este fi ch ero se llamara "move" entonces la llamada de Gen28 en la partitura sería;
f1 0 0 "move"
GEN28 toma un valor de 0 como tamaño y asigna automáticamente la memoria necesaria, creando valores de hasta 10 milisegundos de resolución. Así que en este caso habrá 500 valores, creados por interpolación, de x1 a x2, de x2 a x3 etc. (lo mismo con las ordenadas), a partir de los valores que proporciona la tabla de función. En el ejemplo de arriba, el sonido empezará en la parte delantera izquierda, durante un segundo se moverá la parte delantera derecha, durante otro segundo se alejará pero todavía en la parte delantera izquierda y luego, en sólo una décima de segundo, se moverá a la parte trasera izquierda, sonando un poco a distancia. Finalmente durante los últimos .9 segundos el sonido se moverá a la parte trasera derecha, a media distancia, viniendo por fin a descansar entre los canales izquierdos, bastante alejado. Debido a que los valores de la tabla son accedidos a través del uso del puntero temporal de la unidad space , el tiempo real puede ser obtenido siguiendo los tiempos que indica exactamente el fichero. También puede ser modificado si hacemos que el puntero se mueva más lento o más rápido a lo largo de la misma trayectoria (es decir, cambiando la velocidad del movimiento pero no la trayectoria). Si tienes acceso a una interfaz gráfica que te permita dibujar y editar los ficheros, no hay necesidad de teclear manualmente los valores en un fichero de texto. Pero no importa como se realice el fichero, servirá siempre que se ajuste al formato especificado arriba.
IMPORTANTE: si ifn es 0, space tomará los valores de las coordenadas xy de los parámetros kx y ky .
ktime - índice de la tabla que contiene las coordenadas xy. Si se usa como:
ktime line 0, 5, 5
a1, a2, a3, a4 space asig, 1, ktime, ...
con el fichero "move" descrito arriba, la velocidad del movimiento de la señal será exactamente la especificada en el fichero. Sin embargo, en:
ktime line 0, 10, 5
la señal se moverá a la mitad de la velocidad especificada. O, en el caso de:
ktime line 5, 15, 0
la señal se moverá en dirección contraria a la especificada y tres veces más lento. Finalmente:
ktime line 2, 10, 3
hará que la señal se mueva sólo desde el lugar especificado en la línea 3 del fichero de texto hasta el lugar especificado en la línea 5, y el proceso llevará 10 segundos.
kreverbsend - es el porcentaje de la señal directa que será procesado junto con los valores de distancia y de coordenada para calcular la cantidad de señal que será enviada a las unidades de reverberación como
reverb , o reverb2
kx, ky - cuando ifn es 0, space y spdist usarán estos valores como coordenadas xy para posicionar la señal.
Son opcionales y son ambos 0 por defecto.
EJEMPLO
;asig es alguna señal de audio
ktime line 0, p3, p10
a1, a2, a3, a4 space asig,1, ktime, .1
ar1, ar2, ar3, ar4 spsend
ga1 = ga1+ar1
ga2 = ga2+ar2
ga3 = ga3+ar3
ga4 = ga4+ar4
outq a1, a2, a3, a4
endin
instr 99 ; instrumento reverb
a1 reverb2 ga1, 2.5, .5
a2 reverb2 ga2, 2.5, .5
a3 reverb2 ga3, 2.5, .5
a4 reverb2 ga4, 2.5, .5
outq a1, a2, a3, a4
ga1 = 0
ga2 = 0
ga3 = 0
ga4 = 0
En el ejemplo de arriba, la señal asig es desplazada según los datos de la función 1 indexada por
ktime . space envía la cantidad apropiada de señal a spsend directamente. Las salidas de spsend se suman a los acumuladores globales de Csound y las señales globales se usan como entrada a las unidades de reverberación en un instrumento separado.
space puede ser útil para la panoramización estéreo o cuadrafónica, así como para fijar sonidos en cualquier lugar entre los altavoces. Abajo hay un ejemplo de la localización fija de sonidos en un campo estéreo, usando los valores xy de la partitura en lugar de una tabla de función.
instr 1
...
a1, a2, a3, a4 space asig, 0, 0, .1, p4, p5
ar1, ar2, ar3, ar4 spsend
ga1 = ga1+ar1
ga2 = ga2+ar2
outs a1, a2
endin
instr 99 ; reverb....
....
endin
© 2004 Ingeniería de Ondas |