Saltar navegación

[•] Cómo está feito?

Usando Matrices

Para desenvolver este tipo de síntese necesitamos empezar a traballar con un obxecto chamado "matriz" (array) que en realidade é como unha taboa que almacena coordenadas X e coordenadas Y a partir dunha lista de números.

É importante que entendas cómo funcioan xa que máis adiante, cando traballemos importando audio, este obxecto é realmente moi útil para crear música a partir de sons gravados.

O primeiro que temos que facer é crear a nosa matriz.

 

 

Que aparecerá na ventá do noso patch como unha caixa cun ha línea no medio encabezada polo nome que lle queiramos dar..

 

 

Se queremos configurar as súas propiedades facendo click co botón dereito do rato e escollendo do menú que aparece.

 

 

Aquí podemos cambiar os valores que aparecián cando a creamos.

 

 

Pero tamén podemos configurar cantos puntos forman a nosa línea, o rango dese punto no eixo Y así como o tamaño da nosa array.

 

Na nosa matriz, dependendo de cómo lle indiquemos a colocación dos puntos que forman a línea, crearemos diferente debuxos lineáis formando un ciclo que é o xermen da nosa onda sonora.

Por exemplo no noso patch temos unha taboa na que as líneas que creamos teñen 2051 puntos horizontalmente e o rango no que podemos colocar eses puntos no eixe Y vai de -1 a 1. Estos valores son os que temos para debuxar a nosa onda.

 

 

Se fas click co botón dereito sobre a onda e aleccionas propiedades poderás ver esta información. 

Pero, Cómo podemos leer consecutivamente os valores da nosa línea formada por 2048 puntos? Pois ben, para que este deseño se poida converter en son necesitamos poder leer estos valores, e o obxecto que se utiliza habitualmente para facer esto é [tabread4~]. Existe un [tablead~] a secas, pero o primeiro é moito máis preciso e por eso é o que utilizamos. Así que poñemos dentro deste obxecto o nome da matriz da que imos leer pero necesitamos decirlle de onde a onde queremos que lea e a qué velocidade queremos que o faga. Existen varias posibilidades que veremos máis adiante cando falemos da utilización de arquivos de audio pregrabados pero polo de agora, e para o que nos interesa, imos traballar cun vello amigo; [phasor~].

Se te lembras o obxecto [phasor~] (dente de serra) vai de 0 a 1 tantas veces por segundo cómo lle indiquemos… Pero a nos que vaia de 0 a 1 non nos axuda moito neste caso, necesitamos que vaia de 0 a 2048. Esto o podemos conseguir dun xeito moi sinxelo se aplicamos unha operación de matemáticas báscias; multiplicando todos os valores que produce o [phasor~] entre 0 e 1 por 2048 e así os valores pasan a ser entre 0 e 2048 e podemos leer toda a nosa a lista e ademáis cando remata volve a empezar facendo o que se coñece como un "loop".

 

 

Ademáis, como podemos controlar a velocidad de lectura da nosa taboa acontece un fenómeno moi curioso. Canto máis rápido leemos máis vibracións por segundo estanse producindo polo que o son será máis agudo, e canto menos vibracións máis grave. Así podemos controlar a altura que producimos.

Logo esto vai a un multiplicador onde controlamos o volumen, 0 mínimo e 1 máximo, e á saida de audio [dac~].

Pero aquí hai outro detalle importante. Temos qué debuxar punto a punto os valores de cada un dos puntos da nosa línea para crear o ciclo que condiciona o timbre do noso son? Podes facelo, non é complicado. Fai click sobre a forma de onda, e mentras mantes pulsado, arrastra a dereita ou esquerda. Pero tamén podes usar as matemáticas.

Se usas as caixas de mensaxe e empezado por ";" esto significa que vas enviar ese mensaxe de xeito inalámbrico a algures. Cál é o enderezo? Neste caso "wtable", qué e o nome da matriz do noso patch, e lle decimos qué queremos que faga ahí; que cree unha onda.

Para crear ondas armónicas usamos unha mensaxe que se chama sinesum, algo así como suma de ondas senoidales, e lle indicamos canto espacio ten para dibuxalo… 2048.

É decir, o que estamos facendo é algo así como síntese aditiva, decímoslle que cree unha onda sumando varios parciáis cal é o volumen de cada un deles.

Por exemplo; Se eu lle digo "; onda sinesum 2048 1" vai crear unha línea que representa un ciclo dunha onda senoidal, pero se lle digo "; onda sinesum 2048 1 0.5" a nosa onda engade o seguiste parcial armónico (a octava) á metate de volumen (0.5).

Ademáis podemos facer que os valores de cada parcial sexan variables, $1, $2, $3... Así que se facemos unha mensaxe que sexa "; onda 2051 $1 $2" o valor de estos números pode variar. Pero para que o poida recever temos que enviarlle todos os valores que queremos cambiar duna vez, xa que a mensaje só ten unha entrada. É necesario "empaquetalos" e esto o facemos cun obxecto chamado [pack] no que si que teremos unha entrada para decidir que valor ten cada elemento que vai no paquete.

Fíxate que podes facer esto a man ou cun sistema de números aleatorios [random] que crea un valor de aleatorio entre 0 e 200 - 100, é decir, entre -100 e 100. Pero sobre aleatoriedadee veremos algo máis adiante.

Cando crees os números a man verás que so se envía o paquete ben cando moves o primeiro valor ben cando lle das ao botón de "crear".

Outro detalle a ter en conta é que, as veces, as ondas que creamos poden sairse da nosa "matriz" xa que a súa suma pode producir números máis alá de -1 e 1. Por eso nas mensaxes, separado por unha coma, lle enviamos outro mensaxe que a nosa matriz tamén entende e que é normalize. A normalización é un concepto moi habitual en audio e básicamente consiste en que o punto máis alto da nosa onda acade os límites de volumen sen rebasalos conseguindo así o máximo volumen sen distorsións molestas. Desto tamén falaremos en profundidade máis adiante.

Non te preocupes, se ainda non tes esto moi claro. Fai probas sen medo e cando cheguemos ás leccións nas que traballamos con arquivos de audio irás entendendo esto con maior claridade.

Tamén podes mezclar duás táboas neste patch de /síntese taboa de ondas x2 crossfade para conseguer que a tímbica se module. 

 

Trátase básicamente de duás versións do patch anterior cuio volume está controlado por un "crossfade" que permite equilibrar o volume entre unha e outra taboa.. é decir, cando erstás no medio ambas soan ao mesmo volume, 0.5/0.5, cando subimos cara arriba maior é a presencia da taboa superior e cando baixamos maior é a inferior. Esto o conseguemos coa operación matemática que podes ver na imaxe.

Elementos utilizados

OBXECTOS: [array], [phasor~], [*~], [line~], [tabread4~], [dac~], [Vslider], [bang], [random], [- ], caixas numéricas.

MENSAXES: usamos mensaxes precedidas de ";" que se envían para controlar obxectos a distancia como sinesum ou normalize.