Doble propósito

Recordemos que la función coseno la hemos usado para generar envolventes, pero surge una pregunta cuando usamos tal envolvente para definir la cantidad de sonido util en la síntesis granular: ¿Cómo encogemos o expandimos la porción que posee mayor intensidad? Hay varias aproximaciones como el uso de diferentes ventanas o funciones. 

  En este gráfico podemos observar una situación particular. En un mismo periodo la función que usamos para algunas envolventes en la parte superior y en la parte inferior la misma función modificada para que su "porción útil" sea más pequeña. Ahora, debemos considerar las características de esta función. Se pude observar que en realidad el ascenso a la intensidad máxima es muy rápido y que está rodeado de silencio.

Puede llegar a ser útil para generar un tipo de envolvente que defina en gran proporción las características de la textura que se pueda crear, pero también es posible una función más, pues es posible usar esta forma de onda para crear trenes de pulsos.

Pensemos un momento sobre la función coseno. Si generamos una fase (de 0 a 1 como la totalidad de 0 a 2π) la función se generará normalmente. Si generamos la fase entre -0.5 y 0.5 tenemos entonces un caso en el cual inicia en cero y termina en cero. Ahora, si encontramos una forma de permanecer más tiempo en esos dos números (-0.5 y 0.5) vamos a generar la función que nos interesa.

Examinemos la implementación, en esta ocasión usaremos un objeto que ya habíamos empleado para generar ondas cuadradas, |clip~|. El primer paso es crear el proceso que genere la fase que necesitamos. Para eso necesitamos dos entradas, en este caso la de la izquierda será la frecuencia y la de la derecha un número que multiplicará la salidad de la fase para escalarla a números mayores que -0.5 y 0.5, por ejemplo, si multiplicamos por 10 obtendremos fases entre -5 y 5. Posteriormente, si nosotros ingresamos esa fase escalada al objeto |clip~| cuyos límites se han fijado en -0.5 y 0.5 respectivamente, lo que haremos es provocar que cada vez que el número sea menor a -0.5 (-infinito a 0.5) la salida sea siempre -0.5 y que cuando el número sea mayor que 0.5 (0.5 a infinito) el número sea 0.5; si recordamos lo dicho anteriormente, al ingresar esa información a un generador de la función coseno, obtendremos cero, seguido de la función comprimida.
Dos ejemplos:
 
frecuencia = 13, factor = 1
  
frecuencia= 10, factor = 91
 ahora veamos que ocurre al ingresar esa información de fase al generador de la función coseno:
  
frecuencia= 13, factor = 1
 
frecuencia = 13, factor = 2
 
frecuencia = 13, factor = 3
 Como podemos observar se cumple lo descrito en el análisis de los datos. Sólo nos falta ajustarlo para poder usarlo como envolvente o para generar los trenes de pulsos. Lo cual planteo en la siguiente implementación, sumo 1 y luego multiplico el resultado por 0.5 para reajustar el rango de la función y tener valores entre 0 y 1 lo cual va a ser útil para aplicarlo como envolvente o como tren de pulsos.
Listo, ya tenemos nuestra función ajustada para unirla a otros procesos. Una posibilidad es la siguiente: si añadimos otra función coseno que se encuentre en la misma fase, pero cuyo factor sea diferente y al resultado de los trenes de pulsos lo multiplicamos por esa nueva función.  Obsérvese que en esta ocasión no se restringe el rango de entrada a la función coseno y el resultado que obtendremos en realidad es el de una variación de frecuencias entre -0.5*factor2 y 0.5*factor2. A continuación ilustraré la forma de onda y lo que ocurre en el espectro.
Frecuencia = 252, factor1 = 7, factor2= 2
Frecuencia = 252, factor1 = 17, factor2 = 2 
Frecuencia = 252, factor1 = 7, factor2 = 15
Para una explicación más amplia se puede consultar el capítulo 6 del libro "The Theory and Technique of Electronic Music" de Miller Puckette. 


Comentarios

Entradas populares de este blog

Conociendo lo básico de Pure Data

Pure data - Vanilla, lo básico, añadir externos

Síntesis aditiva