Discusión sobre Envolventes de Control:
El timbre o espectro de un sonido puede ser visto desde dos
perspectivas diferentes conocidas como el dominio del tiempo y el
dominio de las frecuencias o espectro tímbrico. Dependiendo de las
condiciones y de como el sonido esta siendo analizado o sintetizado se
utiliza se utiliza o el dominio del tiempo o las frecuencias. Por
ejemplo para manipular un sonido en el tiempo se utiliza una
envolvente que controla la intensidad o volumen del sonido o de la
suma de los armónicos. Para controlar el desarrollo tímbrico de un
sonido se manipula el espectro por medio de la síntesis de audio
aditiva que se verá después.
Jean Claude Rissett, John Chowning y otros descubrieron que una de las
características más importantes para que el sonido tenga una
percepción natural, tiene que ver con los cambios de intensidad en el
espectro a lo largo de su duración. La manera de controlar estos
cambios es con una envolvente o tabla de valores x-y con tiempos
y cambios, del comienzo al final el sonido.
Profundizando en esto, hay que definir el termino generador de unidades
como la función (o formula) que genera los valores para una señal de
audio. Hay dos tipos de generadores de unidades: primer tipo:
osciladores, filtros, etc., que actúan como función de valores en la
frecuencia de muestreo de la señal de audio. Segundo tipo: generadores
de unidades por interpolación, que normalmente son variables de
control o envolventes y cambian a un valor sub-múltiplo muy por debajo
de la frecuencia de muestreo.
Para ilustrar estos conceptos se utilizará el mismo ejemplo de la
tarea anterior pero en este caso utilizando generadores de unidades
básico en Snd. Hacer la comparación.
El primer ejemplo de generador de unidades en la frecuencia de
muestreo es Oscil que se define en (make-oscil :frecuencia frec) y se
aplica con (oscil senal). Copiar en Emacs o en otro editor de
texto y salvarlo como ``simpenv.scm''. ¡ Analizar el algoritmo !.
(define simpenv
(lambda* (comienzo duracion frecuencia amplitud #:key
(amp-env '(0 0 50 1 100 0)))
;;
(let* ((inicio (floor (* comienzo (srate))))
(longitud (floor (* duracion (srate))))
;;; se define el oscilador
(s (make-oscil :frequency frecuencia))
;;; se define la envolvente
(ampenv (make-env :envelope amp-env
:scaler amplitud
:start comienzo
:duration duracion))
(salida (make-vct longitud)))
(do ((i 0 (1+ i)))
((= i longitud))
(vct-set! salida i (* (env ampenv) (oscil s))
))
(vct->channel salida inicio longitud ))))
|
|
- Cargar el instrumento en Guile de Snd:
- Abrir un archivo de Audio en Snd,
- Generar el sonido
- Reproducir Audio en Snd.
- Cambiar la resolución de la forma-de onda en la ventana de Snd.
La envolvente en ésta definición de instrumento es un parámetro opcional
puesto que está después de #:key (amp-env '(0 0 50 1 100 0)) y podría
ser cambiada por nuevas llamadas a ``simpenv'' (ver el código en
``simpenv.scm''). En éste caso la envolvente tiene forma triangular ya
que el sonido llega a su punto máximo de energía en la mitad de su
duración (i.e. los valores 50 y 100 corresponden a la duración del
sonido).
Ensayar las siguientes llamadas con diferentes tipos de envolvente:
tem Código en SCHEME de ejemplo con envolventes,
- Deshacer
(encima de la ventana de Snd teclear la siguiente secuencia de
caracteres donde ``C-'' es la tecla de control):
- Cargar el archivo de nuevo para compilar los cambios con la
envolvente:
- Rehacer sonido,
- Escuchar el sonido,
- Deshacer
- Generar de nuevo el sonido pero con una envolvente,
> (simpenv 0 2 1000 0.5 :amp-env '(0 0 85 1 100 0))
|
|
- Escuchar:
(ver cambios en la forma de onda)
- Deshacer
- Generar de nuevo el sonido pero con otra envolvente,
> (simpenv 0 2 1000 0.5 :amp-env '(0 0 10 1 50 0.5 100 0))
|
|
- Escuchar:
(ver cambios en la forma de onda)
- Deshacer