miércoles, 7 de septiembre de 2016

Creando con sonido (un mapa mental)

Este mapa mental es producto de mi experiencia dando clases a estudiantes de música, y desarrollando obra propia.

Su propósito fundamental es estimular al uso de sonido en proyectos creativos, explorando las múltiples posibilidades del medio y su gran accesibilidad a através de programas libres y gratuitos.

Tengo pendiente especificar otros recursos técnicos, sobre todo programas libres y gratuitos que se pueden emplear para desarrollar proyectos creativos con sonido y el mapa me servirá como base para su expansión.

 

martes, 13 de abril de 2010

SC: Evaluar varias líneas de código

Entradas anteriores sobre SC (SuperCollider):
Hasta ahora hemos colocado ejemplos de código que están escritos en una sola línea que termina en ; (punto y coma) y que se evalúa (ejecuta) colocando el cursor sobre esa línea y pulsando las teclas CONTROL+ENTER (en Windows).

Si abrimos el código con
(
seguido de un salto de línea y luego el código en varias líneas y para cerrar con salto de línea y
)
y colocamos el cursor inmediatamente después del ( superior y luego pulsamos CONTROL+ENTER, entonces se evalúa todo lo que esté entre los dos paréntesis extremos ( )


Evalúe el siguiente código:

(
{Pan2.ar(
BPF.ar(
Blip.ar(261.66/2,24,1),
130.83*SinOsc.kr(0.25,0,20,21),0.1,8),
SinOsc.kr(0.25,pi/2))
}.play;
)

Revise la ayuda para los ugens Pan2, BPF, Blip y SinOsc para entender lo que está sonando.
Cuando yo lo implemento en mi pc tengo unos golpecitos filtrados que no deberían estar. Si alguien sabe por qué se producen, por favor háganmelo saber (yo creo que es un problema del render de la tarjeta de sonido, un problema con el driver asio). Por lo pronto, así con golpecitos y todo, se puede aprovechar como sonido (serendipia, lo que alivia un poco la frustración).

Para entender mejor lo que está pasando puedes separar el código anterior para ir escuchando la contribución de los diferentes ugens involucrados.

Por ejemplo, evalúa:

{Blip.ar(261.66/2,24,1)!2}.play;

y varía sus parámetros.

Luego evalúa:

{BPF.ar(Blip.ar(261.66/2,24,1),130.83*SinOsc.kr(0.25,0,20,21),0.1,8)!2}.play;

[toda la expresión en una sola línea, o usa los ( ) ]

y finalmente evalúa:

{Pan2.ar(Blip.ar(261.66/2,24,1),SinOsc.kr(0.25))}.play


Regresando a la evaluación de varias líneas de código a la vez, evalúa el siguiente código:

(
{
Saw.ar(110,0.4)*EnvGen.kr(Env.linen(5,0.2,4));

DelayN.ar(RLPF.ar(GrayNoise.ar(0.2),220,0.08)
*EnvGen.kr(Env.perc(4)),3,4);


}.play;
)

Sólo suena el ruido GrayNoise.ar y no la diente de sierra Saw.ar.
Después del ; se evalúa el código pero no genera audio hasta el play y me parece que la instrucción del GrayNoise borra la de Saw. Observe, en los ejemplos suministrados en los help de los diversos ugens, el uso del ;


Si queremos escuchar los dos ugens, es muy sencillo, los mezclamos:

(
{
Saw.ar(110,0.4)*EnvGen.kr(Env.linen(5,0.2,4)) +

DelayN.ar(RLPF.ar(GrayNoise.ar(0.2),220,0.08)
*EnvGen.kr(Env.perc(4)),3,4);


}.play;
)


miércoles, 7 de abril de 2010

PD - Excelente Tutorial de Johannes Kreidler

Pure Data (PD) es un programa extraordinariamente versátil para la síntesis y manipulación, no sólo de sonido sino también de gráficos y videos en tiempo real. Fue desarrollado por Miller Puckette, creador de MAX/MSP, con la diferencia que PD es libre y gratuito y según el propio Puckette ha evolucionado más allá de sus propias expectativas gracias a la colaboración de múltiples otros desarrolladores (una de las grandes fortalezas del software libre).

Pueden conseguir el programa y mucha otra información en:

Pure Data es multiplataforma (hay versiones para Linux, Windows y Mac)

Recomiendo que descarguen y trabajen con pd-extended ya que aumenta el potencial del programa pero también pueden limitarse a la versión original y más orientada a audio que es el pd-vanilla (mantenido or Miller Puckette). El pd-extended contiene en su totalidad al pd-vanilla.


Afortunadamente Johannes Kreidler escribió un excelente tutorial para PD y hay una muy buena traducción al castellano de Raúl Lacabanne. Hay una traducción más reciente de Lucas Cordiviola que no he revisado y también está en inglés y alemán (el original) en:

http://www.pd-tutorial.com/

y al abrir el tutorial de Lucas Cordiviola consigue el siguiente enlace:
 Puede descargar el tutorial completo para leerlo en computadoras sin conexión a Internet haciendo click aqui (incluye los patches)


Recomiendo que sigan el tutorial paso a paso y sabrán usar PD mejor que yo.

Espero estar ofreciendo en otras entradas de este blog algunos circuitos y sugerencias en el uso de PD.

viernes, 26 de marzo de 2010

Filtros

Los filtros permiten modificar el timbre (color) del sonido. Con filtros resonantes se pueden crear resonadores que le dan mucha más calidez a un sonido generado electrónicamente.

La calidad y las características tímbricas individuales de un violín la determina el cuerpo resonante más que la cuerda tensa.


Teorema de Fourier:
Cualquier onda puede ser representada como una suma de ondas sinusoidales de diferentes amplitudes, frecuencias y fases.

Cualquier onda periódica puede ser representada como una suma de sinusoides cuyas frecuencias son múltiplos enteros de una frecuencia fundamental. Estos componentes sinusoidales armónicos se denominan parciales.

Si una onda presenta sólo componentes no armónicos o inarmónicos entonces la onda no es periódica.

Espectro de frecuencias - espectro de líneas:
Es una representación gráfica de los componentes armónicos y no armónicos de una onda. Se representa el peso o valor relativo o normalizado de cada componente en función de la frecuencia. Cada componente es una línea, su tamaño o altura (no confundir con altura musical) - valor en el eje vertical - representa el peso o valor relativo de ese componente y el eje horizontal representa la frecuencia del componente sinusoidal.

Espectro de líneas de ondas "clásicas" utilizadas en música electrónica:

Onda Sinusoidal:








Onda Diente de Sierra:







Onda Cuadrada:






Onda Triangular:







Expresiones matemáticas para representar números enteros, pares e impares:
n , serie de números enteros: 0,1,2,3,4,5,6,7,8,9,10,11......
2n , serie de números pares: 0,2,4,6,8,10,12... donde n es la serie de números enteros
(2n+1) , serie de números impares: 1,3,5,7,9,11,13,15,... donde n es la serie de números enteros

Así podemos decir que los parciales de una onda triangular son sólo los parciales impares con un valor de (2n+1)*F donde F es la frecuencia fundamental de la onda y los pesos de cada parcial van a ser inversamente proporcionales al cuadrado del número de armónico:

Complejidad del timbre:

La onda más sencilla es una onda sinusoidal ya que presenta un sólo componente o parcial. Mientras más parciales y componentes no armónicos presente una onda, se habla de una sonido más complejo, tímbricamente hablando. El sonido más complejo de todos es el ruido blanco que contiene todas las sinosoides posibles (en realidad contiene la misma probabilidad de que aparezca cualquier componente sinusoidal).

Ruido:
En teoría de comunicaciones el ruido es lo que no es parte del mensaje. La idea de que el ruido es un sonido desagradable o feo es un juicio de valor. Cualquier sonido puede ser deseado o no para la construcción de un discurso musical.


Respuesta de Frecuencia:
Si tomamos el siguiente diagrama de bloques y graficamos el valor de salida (amplitud de la onda de salida) de la Caja X dividido entre el valor de entrada (amplitud de la onda de entrada) a la Caja X para cada valor de frecuencia del oscilador sinusoidal, obtenemos la Respuesta de Frecuencia de la Caja X.

Si la salida es proporcional a la entrada para todo el rango de frecuencias entonces se dice que la respuesta de frecuencia es plana, o en otras palabras la relación entre la salida y la entrada es independiente de la frecuencia. Es lo que deseamos, por ejemplo, en un amplificador: que nos amplifique de la misma manera todas las señales de audio, y no que nos amplifique más los agudos que los graves, o que destaque un registro medio. En los amplificadores se busca la respuesta de frecuencia más plana posible.

Respuesta de Frecuencia Plana donde la salida es siempre igual a la entrada:




Filtro Pasa-bajos:
Respuesta de Frecuencia de un filtro pasa-bajos (low pass filter):

0 dB (decibeles) significa que la salida es igual a la entrada.
-3 dB significa que la salida es la mitad de la entrada.

La pendiente del filtro se mide en dB/octava. Valores comunes: -6 dB/octava, -12 dB/octava, -24 dB/octava.... mientras mayor sea la pendiente más atenuación tienen los parciales superiores y por lo tanto menos contribuyen al timbre del sonido.

El filtro pasa-bajos le quita "brillo" al sonido.



Filtro Pasa-altos:
Respuesta de Frecuencia de un filtro pasa-altos (high pass filter):



Filtro Pasa-banda:
Respuesta de Frecuencia de un filtro pasa-banda (band pass filter):


Filtro Elimina-banda o muesca:
Respuesta de Frecuencia de un filtro elimina-banda o muesca (notch filter):




Si sobreponemos la Respuesta de Frecuencia de un Filtro sobre el Espectro de Líneas de una señal (sea o no periódica) podemos llegar a algunas conclusiones sobre el resultado sonoro.

El resultado de filtrar una señal no depende sólo del filtro sino en buena medida también de la señal entrante. Así, ¿tiene sentido filtrar una onda sinusoidal? Hay mejores maneras de modificar la amplitud de una sinusoide que filtrándola, a menos que queramos destacar o eliminar una sinusoide de una señal más compleja.

Filtros en Cascada:

Si la salida de un filtro se conecta a la entrada de otro se dice que están conectados en cascada. Si ambos filtros son iguales (misma frecuencia de corte y misma pendiente) es equivalente a un sólo filtro con la misma frecuencia de corte y el doble de pendiente (si cada filtro atenúa a 12 dB/octava, entonces el efecto de los filtros en cascada es atenuar a 24 dB/octava.



Resonancia - Filtros Resonantes - Resonadores:

La resonancia es la tendencia de un cuerpo físico a vibrar en una o más frecuencias específicas.

Los filtros resonantes simulan la resonancia de cuerpos físicos introduciendo realimentación (feedback) que potencia una banda de frecuencias alrededor de la frecuencia de corte del filtro. La cantidad de resonancia generalmente afecta el ancho de la banda de frecuencias que se amplifica, valores bajos resaltarán una banda más ancha mientras que valores altos de resonancia destacarán bandas más estrechas.

Algunos filtros resonantes comenzarán a oscilar (generar una onda sinusoidal) cuando la resonancia (también conocida como el factor Q o indice de calidad: Quality Factor) alcanza un cierto nivel. A veces se logran unos efectos de aullidos, chillidos,... muy interesantes jugando con valores extremos de resonancia.

Q = Fc / ancho de banda

Respuesta de Frecuencia de un Filtro Pasa Bandas con Q variable:



Si uno estimula un filtro resonante con un impulso el resultado es un golpe resonante. El impulso es una señal muy corta (con una duración prácticamente instantánea). Se logran sonidos de percusión afinada y si colocamos una serie de filtros resonantes en paralelo (el impulso entra a todos los filtros y sus salidas se suman todas) podemos construir timbres percusivos variados con características acústicas mucho más interesantes que si oímos sólo el impulso sin filtrar (que sería como un click).



En otra entrega exploremos algunos circuitos con filtros en los programas de síntesis pd (pure data) y sc (supercollider).













viernes, 5 de febrero de 2010

SC y el ratón (Mouse)

En Supercollider el uso del ratón de la computadora puede resultar muy útil, sobre todo para realizar pruebas que después pueden ser implementadas de otra manera.

A partir de SC 3 ya funcionan en Windows los UGens MouseButton.kr, MouseX.kr y MouseY.kr

Revisa los documentos de Ayuda (Help) de SC:
Archivos de programa/SuperCollider/Help/UGens/Synth control/MouseButton.html
Archivos de programa/SuperCollider/Help/UGens/Synth control/MouseX.html
Archivos de programa/SuperCollider/Help/UGens/Synth control/MouseY.html
Archivos de programa/SuperCollider/Help/UGens/Noise/WhiteNoise.html
Archivos de programa/SuperCollider/Help/UGens/Noise/BrownNoise.html
Archivos de programa/SuperCollider/Help/UGens/Noise/PinkNoise.html

y evalúa los siguientes códigos uno por uno:

{WhiteNoise.ar(0.3)*MouseButton.kr(0,1)!2}.play;
Control+Enter / Pulsa el botón del ratón. Suelta el botón del ratón. Repita cuantas veces quiera.

{WhiteNoise.ar(0.3)*MouseX.kr(0,1)!2}.play;
Control+Enter / Desplaza horizontalmente el ratón del extremo izquierdo al extremo derecho de la pantalla de la computadora. Muévelo todo lo que quieras, con o sin pulsar el botón del ratón.

{WhiteNoise.ar(0.3)*MouseY.kr(0,1)!2}.play;
Control+Enter / Desplaza verticalmente el ratón del extremo inferior al extremo superior de la pantalla de la computadora. Muévelo todo lo que quieras, con o sin pulsar el botón del ratón.

Otra posibilidad interesante que ofrece SC es con JMouseButton.kr, JMouseX.kr y JMouseY.kr

Primero se evalúa (ejecuta) el siguiente código en SC:

JMouseBase.makeGUI;
Verás cómo aparece una ventana Java que va a actuar como base sobre la que se desplaza el ratón. Sólo se activa el ratón si está sobre esta base y no sobre toda la pantalla.

A continuación evalúa:

{WhiteNoise.ar(0.3)*JMouseButton.kr(0,1)!2}.play;
{WhiteNoise.ar(0.3)*JMouseX.kr(0,1)!2}.play;
{WhiteNoise.ar(0.3)*JMouseY.kr(0,1)!2}.play; observa que el volumen es máximo en el extremo inferior de la base y mínimo en el extremo superior, que es lo contrario de lo que sucede con MouseY.





SC: Generadores de Envolventes

En Supercollider el UGen EnvGen (Generador de Envolvente) tiene la particularidad de estar formado por dos expresiones: EnvGen (.ar o .kr) y Env (. "el tipo de envolvente").

Abra los archivos
Archivos de programa/SuperCollider/Help/UGens/Synth control/Envelopes/EnvGen.html
y
Archivos de programa/SuperCollider/Help/Control/Env.html
para revisarlos y estudiarlos mientras lees este blog.

Abra SC y pegue el siguiente código y ejecútelo (no se olvide de encender (BOOT) el servidor):

{Saw.ar(220,0.3)*EnvGen.kr(Env.perc(0.6,3,1),1,doneAction:2)}.play;

Estos son los parámetros que estamos colocando (confírmenlos con la Ayuda (Help)):
Saw: oscilador de forma de onda Diente de Sierra / .ar: calidad de audio / 220: frecuencia del oscilador en Hertz / 0.3: nivel de amplitud del oscilador
EnvGen.kr: generador de envolvente, calidad de control / Env.perc: envolvente tipo percusivo /0.6 segundos de tiempo de ataque de la envolvente percusiva, 3 segundos de caída a 0 de la envolvente luego de haber alcanzado un nivel de 1 (este es el valor de default y no sería necesario colocarlo, a menos que se quiera alcanzar otro valor). Aquí terminan los parámetros de Env.perc y siguen los demás parámetros de EnvGen /
1: puerta abre cuando se le da la orden de procesar el código (Control+Enter) /
doneAction:2 instrucción para que una vez que se complete la envolvente percusiva (caiga a 0) se libere la memoria que está ocupando el proceso, que de hecho no va a sonar más.

Env define el tipo de envolvente a generar. Digamos por simplificar que define la forma gráfica de la envolvente, mientras que EnvGen define cuándo producir esa forma gráfica definida por Env y si la vamos a escalar en su amplitud (ponerla proporcionalmente más grande o más pequeña) o en el tiempo (que dure proporcionalmente más o menos).

Podemos sólo graficar la salida de Env en SC sin necesidad de producir sonido:

Env.perc(0.6,3,1).plot Evalúa (ejecuta) este código en SC y observa el gráfico resultante.

Env.perc(0.6,3,1).test se escucha una sinusoide de 440 Hz con la envolvente dinámica determinada por Env.perc

Env.perc(0.6,3,1).test.plot

Prueba las siguientes expresiones y observa lo que está sucediendo:

Env.perc(0.6,3,1, -4).test..plot
Env.perc(0.6,3,1, -8).test.plot
Env.perc(0.6,3,1, -32).test.plot

Env.perc(0.6,3,1, 4).test.plot
Env.perc(0.6,3,1, 8).test.plot
Env.perc(0.6,3,1, 32).test.plot

Todo generador de envolvente requiere de una Puerta (GATE) para determinar su funcionamiento. Con una puerta cerrada (GATE = 0) el generador de envolvente no produce salida. Al abrir la puerta (GATE = 1) se produce la salida del generador de envolvente siguiendo los parámetros definidos.

En SC hay envolventes (Env) que tienen un Nivel de Permanencia (SUSTAIN), valor donde permanece la salida de la envolvente hasta que se cierre la puerta (GATE = 0) y otros Env donde no existe ese SUSTAIN y simplemente se completa el programa establecido en los parámetros de la envolvente y no hay necesidad de cerrar la puerta.

Tipos de Env en SC que se determinan dentro de un tiempo establecido y que no utilizan SUSTAIN:

Env.linen
Env.triangle
Env.sine
Env.perc

Tipos de Env en SC que utilizan SUSTAIN:

Env.adsr
Env.dadsr
Env.asr
Env.cutoff

Evalúa los siguientes códigos que ejemplifican el uso de Env.adsr con un GATE implementado con MouseButton.kr:

{BrownNoise.ar(0.3)*EnvGen.kr(Env.adsr(2,5,0.4,3),MouseButton.kr(0,1),doneAction:2)!2}.play;
{BrownNoise.ar(0.3)*EnvGen.kr(Env.adsr(2,5,0.4,3),MouseButton.kr(0,1))!2}.play;

¿Detectas y te explicas la diferencia entre ambos?

Al abrir el Gate (pulsar el botón del ratón) el EnvGen produce una salida que sube a 1 en 2 segundos (tiempo de ataque - attack), luego baja a 0.4 (nivel de permanencia - sustain) en 5 segundos (tiempo de caída inicial - decay) y se queda en ese nivel hasta que se cierre la puerta (se levante el botón del ratón), y a partir de esa acción la salida va a bajar a 0 en 3 segundos (tiempo de caída final - release). Si la puerta se cierra antes de llegar al nivel de permanencia (sustain) actúa la caída final - release.



El tipo de Env Env.new puede definirse tanto con Sustain o por tiempo determinado.

En Env.new se define un arreglo (array) para niveles y otro arreglo para duraciones en segundos. Un array se escribe entre [ ] . Un arreglo no es más que una secuencia de números (o de objetos).

Evalúa el siguiente código:

{PinkNoise.ar(0.3)*EnvGen.kr(Env.new([0,0.8,0.2,1,0],[2,1,3,5],0),1,doneAction:2)!2}.play;
El ruido rosado crece en dinámica de 0 a 0.8 en 2 segundos, luego decrece a 0.2 en 1 segundo, crece a 1 en 3 segundos y finalmente decrece a 0 en 5 segundos.

Ahora evalúa el siguiente código:
{PinkNoise.ar(0.3)*EnvGen.kr(Env.new([0,0.8,0.2,1,0],[2,1,3,5],'linear',3),MouseButton.kr(0,1),doneAction:2)!2}.play;
Pulsa el botón del ratón y déjalo pulsado. El rudio rosado crece de 0 a 0.8 en 2 segundos, luego decrece a 0.2 en 1 segundo, crece a 1 en 3 segundos y se queda aquí mientras se tenga pretado el botón del ratón. En cuanto se suelta el ruido rosado decrece de 1 a 0 en 5 segundos. El valor 3, después de la definición del tipo de curva 'linear' (lineal) significa que el sustain se establece en el nodo 3 del arreglo de amplitudes. El nodo 0 = 0, nodo 1 = 0.8, nodo 2 = 0.2, nodo 3 = 1.

{PinkNoise.ar(0.3)*EnvGen.kr(Env.new([0,0.8,0.2,1,0],[2,1,3,5],'linear',1),MouseButton.kr(0,1),doneAction:2)!2}.play;
Observa lo que sucede al cambiar el sustain en el nodo 3 por sustain en el nodo 1 .


El uso más obvio de los generadores de envolvente es crear envolventes dinámicas para los sonidos. Éste es un parámetro fundamental de un sonido y mucho de su carácter puede ser evocado desde éste parámetro. Una envolvente "percusiva" por ejemplo, ya dice mucho del carácter del sonido. Pero también podríamos producir glissandi controlados (al aplicar las envolventes a controlar las frecuencias de los osciladores) o modificar el timbre del sonido ya sea controlando las frecuencias de corte o frecuencias de resonancia y el ancho de banda o resonancia (Q) de los filtros o controlando individualmente las envolventes dinámicas de los distintos componentes sinusoidales de una onda.

domingo, 24 de enero de 2010

Supercollider (SC) - MME II -unearte

* Supercollider es en esencia un lenguaje de programación, por lo que la sintáxis (los símbolos y el orden en que aparecen en el texto) es fundamental.

* algunos símbolos a cuidar: . ; : .ar .kr { [ ( ) ] } / \ si es Mayúscula o minúscula, si hay o no espacio en blanco
Siempre que se abre una { debe cerrarse la }
Siempre que se abre un [ debe cerrarse el ]
Siempre que se abre un ( debe cerrarse el )

* En Windows. Para conocer un UGen se busca con el Explorador de Windows el archivo:
C:\Archivos de programa\SuperCollider\Help\UGens\UGens.html y se abre y busca la información (recomiendo usar buscar palabra que usualmente es la combinación de teclas Ctrl+F, y para la siguiente F3). Yo uso los Browsers Mozilla Firefox o Google Chrome para abrir los archivos .html.

* En Windows. Recomiendo que en tu computadora abras el Explorador de Windows, luego el menú Herramientas y el sub-menú Opciones de Carpeta, el sub-sub-menú Ver y de la lista dejar sin tilde la opción Ocultar las extensiones de archivo para tipos de archivo conocido y así podrás ver qué extensión tiene cada archivo en el Explorador, como por ejemplo UGens.html

* Curioseen todo lo que quieran el Help de Supercollider y no le tengan miedo. Si no entienden podrán preguntar o seguir intentando dar con una respuesta satisfactoria y cuando entiendan mejor el programa y la teoría sabrán que leyeron algo al respecto en algún lado de la Ayuda, pueden encontrar la información más fácilmente y tal vez entonces entiendan mucho más.

* 1er sonido en SC (1er UGen: SinOsc):

{SinOsc.ar(440,0,0.2)}.play;

En Windows. Colocar el cursor sobre la línea del texto y teclear Ctrl+ENTER . Para silenciar teclear ALT+.
Si se quiere producir el sonido de nuevo recuerda volver a colocar el cursor en la línea del texto.

* 2do sonido en SC (2do UGen: Line):

{SinOsc.ar(Line.kr(220,880,6),0,0.2)}.play;


TAREA 1:

Explorar los UGens Blip, Formant, Klang y XLine revisando su Help y probando con distintos valores para sus argumentos.


* Jueguen, Exploren, Experimenten... las Horas de Vuelo son indispensables