Sei sulla pagina 1di 8

Msica por computadora

Ernesto Romero y Hernani Villaseor


Centro Multimedia 2012
Sesin 17
Delay
El delay es un objeto que trabaja con parmetros de tiempo creando repeticiones a partir de un
sonido origen este e!ecto se "a usado muc"o en di!erentes tipos de m#sica por ejemplo el
$ub %amaiquino& Cuando suena el sonido origen inmediatamente despu's comien(a una serie
de repeticiones del mismo sonido las cuales sucede en un tiempo espec)!ico el cual se llama
tiempo de delay dems se establece la cantidad de repeticiones lo cual se llama feedback.
En *C e+siten tres di!erentes tipos de delay, los denominados $elay Comb y ,llpass&
CombL es un objeto que genera una l)nea de delay con una interpolaci-n lineal para generar
este proceso es necesario que el objeto contenga un bu!!er interno en este caso esta dado por
el tiempo m+imo de $elay que establece la duraci-n de un bu!!er interno el parmetro de
tiempo de decay es equi.alente a parmetro de feedback de los delay "ard/are y establece el
n#mero de repeticiones que genera la l)nea de delay&
Comb0&ar12r3entrada tiempoMa+$elay tiempo$elay tiempo$ecay multiplicaci-n adici-n4
entrada5 es la seal a la que aplicaremos el delay
tiempoMa+$elay5 en segundos su usa para iniciali(ar el tamao del bu!!er del delay
tiempo$elay5 en segundos duraci-n entre cada repetici-n
tiempo$ecay5 en segundos es el tiempo en el que el delay se .a des.aneciendo
// intenta sustituir el objeto CombL por CombC y CombN
(
SynthDef(\Combdelay,{|amp=|
!ar sen,del"
sen=#hiteNoise$ar(amp%&'n!(en$)r('n!$per*(+$+,+$%,,mpulse$
)r(+$-.%,done/*tion0+%"
del=CombL$ar(sen,+$1,+$-,2%"
3ut$ar(+,del%"
4%$send(s%
%
1
Synth(\Combdelay%
E+isten otros dos delays de este tipo Comb6 que no usa interpolaci-n y CombC que usa una
interpolaci-n cuadrada la cual requiere de mayor procesamiento pero es ms e+acta&
AllpassL es un delay con una interpolaci-n lineal tiene los mismos argumentos que Comb0
,llpass6&ar12r3entrada tiempoMa+$elay tiempo$elay tiempo$ecay multiplicaci-n adici-n4
// intenta sustituir el objeto /llpassL por /llpassC y /llpassN
(
SynthDef(\allpassdelay,{|amp=|
!ar sen,del"
sen=#hiteNoise$ar(amp%&'n!(en$)r('n!$per*(+$+,+$%,,mpulse$
)r(+$-.%,done/*tion0+%"
del=/llpassL$ar(sen,+$1,+$-,2%"
3ut$ar(+,del%"
4%$send(s%
%
Synth(\allpassdelay%
7gual que los delays de tipo Comb ,llpass tiene tres tipos de interpolaci-n lineal cuadrada y
sin interpolaci-n5 ,llpass0 ,llpassC y ,llpass6& 0a di!erencia con los delays de tipo Comb es
que ,llpass manda a la salida de manera inmediata lo que est entrando por lo que su amplitud
tiene a ser ms baja pero utili(ado como delay no tienen muc"a di!erencia&
Delay es un objeto que genera ecos sin una parmetro que controla el feedback. ,l igual que
los anteriores cuenta con tres tipos de interpolaci-n lineal cuadrada y no lineal5 $elay0
$elayC y $elay6&
$elay0&ar12r3entradatiempoMa+$elay tiempo$elay multiplicaci-n adici-n4
8ara estos ejemplos usaremos el objeto $ecay de esta manera simulamos un tipo de
!eedbac2 el cual no contiene los objetos $elay&ar&
$ecay&ar3seal tiempo$ecay multiplicaci-n adici-n4
,"ora usamos el $ecay y $elay0 dentro de un *ynt" para obtener un eco& En esta caso el
argumento de multiplicaci-n de $ecay sir.e como seal de entrada lo mismo que el argumento
de adici-n de $elay0&
2
// intenta sustituir el objeto DelayL por DelayC y DelayN
(
SynthDef(\delay,{|amp=|
!ar sen,del"
sen=De*ay$ar(,mpulse$ar(+$.%,+$,#hiteNoise$ar%"
del=DelayL$ar(sen,+$.,+$,,sen%"
3ut$ar(+,del%"
4%$send(s%
%
Synth(\delay%
PitchShift
Es un objeto que cambia el tono y esta basado en el uso de granos con un en.ol.ente
triangular y una densidad de 951&
8itc"*"i!t&ar3entrada tamaoVentana tonoRango tono$ispersion tiempo$ispersion
multiplicaci-n adici-n4
entrada5 seal de entrada
tamaoVentana5 tamao de la .entana del grano en segundos
tonoRango5 rango del pitc"s"i!t entre 0&0 y 9&0
tono$ispersion5 la m+ima des.ici-n aleatoria del del tono establecida por el tonoRango
tiempo$ispersion5 no puede ser mayor a tamaoVentana es un o!!set aleatorio que .a de 0 a
toempo$ispersi-n y se agrega al delay de cada grano&
(
SynthDef(\pit*hshift,{|amp=+$.|
!ar sen,ran5o6ono, ps"
ran5o6ono=7ouse8$)r(+$+,9$+%"
sen=:lip$ar(2++, ;, amp%"
ps=<it*hShift$ar(sen,+$+1,ran5o6ono,+,+$+-%"
3ut$ar(+,ps%"
4%$send(s%
%
Synth(\pit*hshift%
SoundIn
:
Con este objeto leemos el sonido que entra a tra.'s de la tarjeta de sonido o el micr-!ono de
nuestra computadora& ,s) que toda seal anal-gica o ac#stica que quieras conectar a
*uperCollider lo puedes "acer a tra.'s de este objeto&
Est basado en el objeto 7n y toma 0 como la primer entrada disponible independientemente
de que "aya m#ltiples seales de entrada& En el caso de contar con una tarjeta nati.a de la
computadora 0 equi.ale a la entrada de micr-!ono o al canal de entrada i(quierdo 1 al
derec"o y as) sucesi.amente&
*ound7n&ar3entrada multiplicaci-n adici-n4
entrada5 el canal o array de canales que sern le)dos&
// este *=di5o a*ti!a el mi*r=fono o *anal de entrada de tu
*omputadora
{Sound,n$ar(+%4$play
(
SynthDef(\soundin,{|amp=+$., 5ate=, en=+|
!ar entrada, en!"
entrada=Sound,n$ar(en,+$%"
entrada=<an-$ar(entrada,+,%"
en!='n!(en$)r('n!$asr(+,,+%,5ate,done/*tion0+%"
3ut$ar(+,entrada&en!%"
4%$send(s%
%
p=Synth(\soundin%
p$set(\5ate,+% // apa5a
p$set(\5ate,% // prende
6ota que done,ction esta en 0 esto permite usar el argumento ;gate para prender y apagara la
entrada de la seal&
In
0a clase 7n nos permite leer seales de audio desde un bus el cual es un tipo de canal au+iliar&
Esto es muy #til cuando queremos procesar una seal independientemente de su proceso es
decir queremos la seal limpia en un *ynt" y el proceso en otro *ytn"& 8ara lograr esto
mandamos la seal del sonido a el *ynt" de la seal de proceso para lo que usamos una
combinaci-n entre el <ut del *ynt" donde est la seal y la clase 7n en el *ynt" que
recibiremos la seal que queremos procesar&
9
7n&ar12r3bus numeroCanales4
bus5 el n#mero de bus desde donde leer la seal
numeroCanales5 n#mero de canales desde donde leer la seal
En un *ynt"$e! el argumento out saca la seal por di!erentes canales o buses& ,l mandar la
seal por el out 0 el sonido .a a la bocina i(quierda pero si lo mandamos por el out 9 no
sonar al menos que tengamos una tarjeta de sonido multicanal& 8odemos .er lo que "ay en el
out 9 si abrimos el scope del ser.idor con el argumento = entre par'ntesis5 s&scope3=4&
(
SynthDef(\)i,{|5ate=, out=+|
!ar sen,en!"
sen=#hiteNoise$ar(+$%"
en!='n!(en$)r('n!$asr(+,,+%,5ate,done/*tion0-%"
3ut$ar(out,sen&en!%
4%$send(s%
%
>)i=Synth(\)i%
>)i$set(\out, 9%"
s$s*ope(.%"
>)i$set(\out, +%"
>)i$set(\5ate, +%"

,"ora construimos un *ynt" con la clase 7n y lo llamamos ;in& 0a clase 7n recibe la seal de
audio del out 9 y la manda por un <ut al canal 0& ,lgo importante de destacar es que cuando
llamamos al *ynt"3;in4 debemos "acerlo con el mensaje &a!ter& Este mensaje determina la
ubicaci-n de nuestro synt" en un rbol de nodos& ,"ora podemos tomar la seal que est en el
bus 9 y sacarlo de nue.o al canal 0&

(
SynthDef(\in,{|5ate=|
!ar sen,en!"
sen=,n$ar(9%"
en!='n!(en$)r('n!$asr(+,,+%,5ate,done/*tion0-%"
3ut$ar(+,sen&en!%
4%$send(s%
%
=
t=Synth$after(s,\in%
t$set(\5ate,+%

Hagamos un ejercicio para utili(ar las clases 7n y <ut para asignar e!ectos a una seal& 8rimero
"acemos un *ynt"$e! que lea una muestra de audio de un >u!!er y mandamos su seal al bus
?&
a=:uffer$read(s,?/sounds/!o@$aiff?%
a$play
(
SynthDef(\sample,{|5ate=|
!ar sen,en!"
sen=<lay:uf$ar(,a$bufnum,loop0%"
en!='n!(en$)r('n!$asr(+$,+$.,+$%,5ate,done/*tion0-%"
3ut$ar(A,sen&en!%
4%$send(s%
%

d=Synth(\sample%
d$set(\5ate,+%

$espu's creamos un *ynt"$e!3;clean4 que lea la seal del bus ? y la saque limpia por el bus 0&
(
SynthDef(\limpio,{|5ate=|
!ar sen,en!"
sen=,n$ar(A%"
en!='n!(en$)r('n!$asr(,+$9,-%,5ate,done/*tion0-%"
3ut$ar(+,sen&en!%
4%$send(s%
%

e=Synth$after(s,\limpio%
e$set(\5ate,+%
@n *ynt"$e!3;e!+14 leer la seal del bus ? pero le agregar un e!ecto re.erb y la sacar por el
bus 0&
(
SynthDef(\efe*to,{|5ate=|
A
!ar sen,en!"
sen=,n$ar(A%"
.$do({ sen = /llpassN$ar(sen, +$+., B+$+.$rand, +$+.$randC,
-% 4%"
sen"
en!='n!(en$)r('n!$asr(-,+$.,-%,5ate,done/*tion0-%"
3ut$ar(+,sen&en!%
4%$send(s%
%

t=Synth$after(s,\efe*to%
t$set(\5ate,+4
,s) alternando entre el *ynt"3;limpio4 y el *ynt"3;e!ecto14 podemos sacar la seal limpia o con
e!ecto&
,qu) "acemos lo mismo pero con una seal pro.eniente del micr-!ono de la computadora
usando la clase *ound7n&
(
SynthDef(\mi*ro,{|5ate=|
!ar sen,en!"
sen=Sound,n$ar(+%"
en!='n!(en$)r('n!$asr(+,,+%,5ate,done/*tion0-%"
3ut$ar(A,sen&en!%
4%$send(s%
%
D=Synth(\mi*ro%
D$set(\5ate,+%
(
SynthDef(\limpio,{|5ate=|
!ar sen,en!"
sen=,n$ar(A%"
en!='n!(en$)r('n!$asr(,+$9,%,5ate,done/*tion0-%"
3ut$ar(+,sen&en!%
4%$send(s%
%
B

E=Synth$after(s,\limpio%
E$set(\5ate,+%
(
SynthDef(\re!,{|5ate=|
!ar sen, efe*to, en!"
sen=,n$ar(A%"
efe*to= .$do({ sen = /llpassN$ar(sen, +$+., B+$+.$rand,
+$+.$randC, -% 4%"
en!='n!(en$)r('n!$asr(,+$9,%,5ate,done/*tion0-%"
3ut$ar(+,efe*to&en!%
4%$send(s%
%

@=Synth$after(s,\re!%
@$set(\5ate,+%
s$Duery/llNodes
iblio!raf"a
7+i ,udio 3200C4& SuperCollider Basics. Recuperado de5
/// & i+i D audio & net
6etri E& y Romero E& 3200C4& Curso de SuperCollider Intermedios. Centro Multimedia5 M'+ico&

Esta obra est sujeta a la licencia ,ttributionD6onCommercialD*"are,li2e :&0 @nported de
Creati.e Commons& 8ara .er una copia de esta licencia .isite
"ttp511creati.ecommons&org1licenses1byDncDsa1:&01 o en.ie una carta a Creati.e Commons 999
Castro *treet *uite ?00 Mountain Vie/ Cali!ornia ?9091 @*,&
C

Potrebbero piacerti anche