Saltar navegación

[•] Cómo está feito?

Aquí tes a primeira versión deste patch. O proceso de cómo cargar un arquivo de audio dende o noso disco duro usando [soundfiler] xa a vimos na lección de Reproducir Audio. Tamén vimos cómo funciona o obxecto [tabread4~] para leer o son que almacenamos nunha matriz cando falamos da Síntese de Taboa de Ondas so que mentras nesta última utilizábamos o [phasor~] para guiar ao [tabread4~] aquí imos usar un obxecto parecido a [line~] so que algo máis preciso e que se chama [vline~].

 

 

Cando cargamos o noso arquivo lembra que [soundfiler] devolve o número de samples (mostras) que o forman. Ese número é moi útil xa que o podemos utilizar para controlar e sincronizar diferentes elementos.

Neste caso o primeiro que facemos é empaquetalo nunha mensaxe para controlar o noso [vline~] como segundo valor. A [vline~] podémoslle enviar unha mensaxe composta por tres elementos que son: valor no que empeza, valor no que remata (separado por unha coma) e tempo no que debe recorrer esa distancia. De feito este último dato o extraeremos dos samples do noso arquivo de audio xa que se dividimos o número de samples entre 44.1, supoñendo que o noso de arquivo de audio está gravado a esa calidade, obteremos a duración do son que cargamos.

Se te fixas o primeiro valor da mensaxe a almacenamos nun "float" e está controlado polo "slider" verde que se comunica mediante "send/receive" e, do mesmo xeito, tamén podemos controlar o final de reproducción dende o "slider" vermello. Os valores destos "slider" está tamén condicionado polo valor que devolve o [soundfiler] e para que cambie o seu tango usamos a mensaxe "range" acompañada dunha variable "$1", e a mnesaxe "set" para que, según carguemos o audio o de inicio se posicione ao principio, 0, e o vermello se situe ao final.

Outra cuestión importante é que cando movemos estos cursores tamén é preciso reaxustar a duración xa que se a mantivéramos entón o audio pasaría a sonar a diferente velocidad xa que reproduciríamos un fragmento menor no mesmo tempo. Para solucionar esto facemos unha resta entre o valor do principio e do final e como queremos valores absolutos, non nos importa se son positivos ou negativos, entón utilizamos o obxecto [abs].

Tamén creamos un sistema de "loop" usando o obxecto [delay] e temos un cursor en negro que nos axuda a saber que parte do audio estase a reproducir para o que usamos a mesma mensaxe que para o [vline~], ainda que neste caso vai a un obxecto [line] xa que non é preciso ter tanta resolución.

Outra posibilidade é usar, como fixemos na Síntese Taboa de Ondas, un [phasor~] para controlar o [tabread4~] como podes ver no patch /alterando audio phasor

 

 

Aquí o [soundfiler] pasa por unha operación na que dividimos 44100 polo números de samples do audio que cargamos. Este tipo de operacións podense formular de xeito matemático co obxecto [expr].

Esto daranos o tempo en milisegundos que dura o noso arquivo que utilizamos para que o [phasor~] vaia ese número de veces por seguno de 0 a 1. Por exemplo, se o noso arquivo gravado a 44100Hz dura un segundo terá 44100Hz dando a división o valor 1 co que o [phasor~] irá de 0 a 1 unha vez por segundo. Se durase dous segundos tería 88200Hz eo resultado da división sería 0.5 co que movers de 0 a 1 levaríalle 2 segundos.

Pero como nos queremos que lea de 0 ao valor final do sampler temos que multiplicar o resultado do [phasor~] polo valor que devolve o [sounfiler] e así conseguiremos que lea, por exemplo no primeiro dos nosos exemplos, de 0 a 44100 en un segundo.

Se variamos o valor do [phasor~] entón variaremos a velocidade. Aquí o facemos con unha multiplicación.

Tamén podes controlar a posición a man como fixemos en /alterando audio scratch. Só tes que enviar os valores ao [tabread~] directamente ainda que é mellor usar o [vline~] para obter unha certa sensación de inercia e suavizar o efecto.

 

 

Por último déixote eiquí o patch /alterando audio varios que resume todos estos procedementos.

Elementos utilizados

OBXECTOS: [openpanel], [soundfiler], [send], [receive], [pack], [/], [delay], [spigot], [bang], [tigger], [float] o [f], [Hslider], [line], [abs], [-], [vline~], [tabread4~], [dac~], [array], [expr], [vslider~], [phasor~], [line~], [*], [*~] e caixas numéricas.

MENSAXES: con [soundfiler] usamos a mensaxe read e -resize para cargar o audio, mensaxes con variables ($1, $2, $3) e set e range para configurar os "sliders".