Skip to main content

Envelope

Que conceptos nuevos necesitaremos conocer?


Que es un envelope o envolvente?

El envelope va a determinar la variación de los niveles de una señal a lo largo del tiempo. Para nosotros va a ser una herramienta que nos permitirá dar forma/esculpir el sonido con el que estemos trabajando, desde el su volumen a su frecuencia. En lo que a síntesis de sonido se refiere el envelope es una curva que nos va a permitir controlar algún parámetro de una señal (Wilczek, 2022). Ya lo hemos utilizado anteriormente, pero de una manera muy sencilla cuando utilizamos el line para suavizar los cambios de volumen en el apartado tal. En este caso utilizamos una sola rampa. 

Los envelopes se componen por varios segmentos y en cada segmento encontraremos una rampa diferente. Vamos ver el envelope ADSR, que es uno de los mas utilizados. Este envelope consiste en cuatro segmentos: A=attack, D=decay, S=sustain y R=release.


image-1667301544169.webpFigura 1. ADSR envelope

 El Attack es el segmento en el que el valor aumenta desde el mínimo hasta el máximo que va a alcanzar el envelope. El decay es el segmento en el que el envelope cae desde el pico máximo que se alcanza en el ataque/attack hasta un valor que se mantendrá constante en el segmento conocido como Sustain. El realease es el último segmento del envelope en el cual el valor desciende a 0. 

Por ejemplo, utilizaremos el ADSR para controlar la amplitud de una señal, en este caso estaremos dando forma al volumen de esta señal. Aqui teneis un ejemplo de ADSR modulando la amplitud:


En el video anterior podéis escuchar cómo cambia el sonido al modificar el tiempo de duración de cada segmento. 

Ahora vamos a aprender como hacer envelopes en pure data 

Que elementos nuevos de Pure data necesitaremos conocer?

Delay

Este objeto nos va a permitir enviar un bang después de un tiempo de espera determinado. Digamos que nos va a permitir retener y retrasar el envío de un bang.

image-1667295580433.PNG

El tiempo que se retrase el bang lo configuraremos en el argumento del objeto o a traves del inlet derecho. A traves del inlet izquierdo también podemos configurar el tiempo e iniciar el delay, sin embargo cuando configuremos un tiempo a traves del inlet derecho el delay no empezara hasta recibir un bang en el inlet izquierdo. Por defecto la unidades son milisegundos, si queremos trabajar con otra unidad como por ejemplo segundos, tendremos que especificarlo en el mensaje que configura el tempo del delay. Si queremos detener el delay enviaremos un mensaje de stop.

image-1667297083579.PNG

Abrir el patch de demostracion xxx.

En la imagen superior el primer delay retrasara el bang medio segundo y el segundo delay 1 segundo. Tras mandar el mensaje configurando el tempo en segundos el tercer delay retrasará el bang medio segundo, si no enviamos ese mensaje configurando el tempo, el delay se retrasará medio milisegundo.


Delay + line

Como vimos anteriormente el objeto line nos permite crear rampas (incluir un dibujo de una rampa en la explicación del line antes). Crear una progresión lineal desde un valor a otro en un tiempo determinado. Combinando delay y line vamos a poder combinar rampas para crear progresiones mas complejas, con diferentes direcciones. Por ejemplo ir de 1 a 0.5 en 500 milisegundos y al llegar a 0.5, ir a 0 en 800 milisegundos.

Vamos a ver cómo crear ahora un envelope con Attack, Decay, Sustain y Release en pure data, podéis abrir el patch XXX para probar su funcionamiento:

image-1667311522936.PNG


En la imagen superior vemos en patch de ejemplo xxx. Para comenzar el envelope activaremos el bang que se encuentra arriba. Este bang envía el primer y activa los dos delays. Cuando termina la primera rampa (el ataque) después de medio segundo comienza la segunda rampa, como podéis ver el tiempo que dura la primera rampa y el tiempo del primer dealay es el mismo para que justo en el momento en que termine la primera rampa comience la siguiente rampa que durara 700 milisegundos. Cuando termine la segunda rampa habrán pasado 1200 milisegundos desde el comienzo del envelope. Si quisiéramos que la tercera rampa comenzara inmediatamente despues de terminar la segunda configuraríamos el segundo delay con un tiempo de 1200 milisegundos, pero queremos que la señal se mantenga constante durante 3800 milisegundos, asi crearemos la seccion de sustain. para esto configuraremos el delay con un tiempo superior a 1200 en nuestro caso 1200+3800=5000 ya que 3800 es el tiempo que queremos que dure el sustain. Tras 5000 milisegundos el segundo delay envia el bang que envia el mensaje con la tercera rampa al line~, comienza el release que en nuestro caso durara 1000 segundos. 

Pregunta: ¿Cuál es la duración total del envelope en el ejemplo anterior?

Ejercicio: crea un patch que genere un envelope con un ataque que vaya de 0.5 a 1 en 300 milisegundos, un decay que baje a 0.7 en 900 milisegundos. Un sustain de 2000 milisegundos y un decay que baje a 0 en 1100 milisegundos. ¿Cuál es la duración total del envelope que acabais de construir?


Como habéis visto en el video de arriba el tiempo que dura cada segmento es un parámetro clave para darle forma al sonido. Ahora vamos a modificar el patch anterior para poder controlar el tiempo de cada segmento, y para ello vamos a introducir una utilidad de pure data que nos va a permitir modificar el valor o los valores de un mensaje u objeto. Es el símbolo del dollar $.

$


image-1667316243853.PNG

Subpatch?


vline

Este objeto nos va a permitir construir rampas de la misma forma que la combinación de delay y line

Figuras:

Figura 1. ADSR envelope. https://thewolfsound.com/envelopes/ 

Referencias:

Wilczek, J. (2022, Julio 3) Envelopes in Sound Synthesis: The Ultimate Guide. WolfSound. https://thewolfsound.com/envelopes/