(
SynthDef(\sonido, {|dur=0.5, amp=1, freq=400, pan=0|
				var sig, env;
				sig=Pulse.ar(freq,Line.kr(0.05,0.5,0.05),amp).wrap2(1);//*Pulse.ar(100)!2;
				sig=Pan2.ar(sig,pan);
				env=EnvGen.kr(Env([0,1,1,0],[0,dur/2,0]),doneAction:2);
				Out.ar(0,sig*env);
				}).send(s)
)
Synth(\sonido)

(
SynthDef(\bombo, {|dur=0.5, amp=1, freq=400, wrap=1|
				var sig, env;
				sig=Mix(SinOsc.ar(XLine.kr([freq*2,(freq*2)+(freq/8)],[freq,freq/10],0.1),pi/2,amp/2)).wrap2(wrap)!2;
				env=EnvGen.kr(Env.perc(0.01,dur),doneAction:2);
				Out.ar(0,sig*env);
				}).send(s)
)
Synth(\bombo)

(
// Arrays de Ritmos
// Los arrays estan compuestos por elementos duales en los que el primer elemento indica si es nota(1) o silencio(0)

~uno=[[1,1/8],[1,1/8],[1,1/8],[0,1/8],[1,1/16],[1,1/16],[1,1/16],[1,1/16],[1,1/8],[0,1/8]];

~dos=[[1,1/16],[1,1/16],[1,1/16],[1,1/16],[1,1/8],[1,1/8],[1,3/16],[1,1/16],[1,1/8],[0,1/8],
      [1,3/16],[1,1/16],[1,1/8],[1,1/8],[1,3/16],[1,1/16],[1,1/8],[0,1/8]];
      
~tres=[[1,1/4],[1,1/4],[1,1/4],[1,1/4],
	  [1,1/4],[1,1/4],[1,1/4],[0,1/4],
	  [1,1/4],[1,1/4],[1,1/4],[1,1/4], 
	  [1,1/4],[1,3/16],[1,1/16],[1,1/4],[0,1/4]];
      
~cuatro=[[1,1/8],[1,1/8],[0,3/16],[1,1/16],[1,1/8],[1,1/8],[0,3/16],[1,1/16],
		[1,3/16],[1,1/16],[1,1/16],[1,1/16],[1,1/16],[1,1/16],[1,1/8],[1,1/8],[0,3/16],[1,1/16]];
		
~cinco=[[1,3/16],[1,1/16],[1,3/16],[1,1/16],[1,1/16],[1,1/16],[1,1/16],[1,1/16],[1,1/16],[1,1/16],[1,1/16],[1,1/16],
	   [1,1/16],[1,1/16],[1,1/16],[1,1/16],[1,1/16],[1,1/16],[1,1/16],[1,1/16],[1,1/16],[1,1/16],[1,1/16],[1,1/16],[1,1/8],[1,1/8]];
)

(
// Arrays de notas en Pitch class sets (Forte)

~a=[0,2,4,5,7,9,11,12];
~b=[0,4,7,12];
~c=[2,5,9];
~d=[0,12];
~e=[2,11];

)

~tempo=1.75

~amp1=1;
~amp2=1;
~amp3=1;
~ampBombo=0;
~ampTarola=0;

//Base ritmica
(
~arrayBombo=[0,4,8,9,11,12]++([0,4,8,9,11,12]+16); // o el que sigue
~arrayTarola=[2,6,10,14]
)

(
~arrayBombo=[0,4,8,12]++([0,4,8,9,11,12]+16)
~arrayTarola=[2,6,10,12,14]
)

// Break
(
~arrayBombo=Array.rand(10,0,15);
~arrayTarola=Array.rand(10,0,15)
)

(
// jugar cambiando este conjunto de Pseq's con el que sigue
(
~pseqNotasUno=Pseq([~a,~b,~c,~d,~e].choose.scramble.midiratio*400,100000).asStream;
~pseqNotas2Uno=Pseq([~a,~b,~c,~d,~e].choose.scramble.midiratio*400,100000).asStream;
~pseqNotas3Uno=Pseq([~a,~b,~c,~d,~e].choose.scramble.midiratio*400,100000).asStream;
~pseqNotas=~pseqNotasUno;
~pseqNotas2=~pseqNotasUno;
~pseqNotas3=~pseqNotasUno;
);
(
~pseqRitmosUno=Pseq([~uno,~dos,~tres,~cuatro,~cinco].choose,100000).asStream;
~pseqRitmos2Uno=Pseq([~uno,~dos,~tres,~cuatro,~cinco].choose,100000).asStream;
~pseqRitmos3Uno=Pseq([~uno,~dos,~tres,~cuatro,~cinco].choose,100000).asStream;
~pseq=~pseqRitmosUno;
~pseq2=~pseqRitmos2Uno;
~pseq3=~pseqRitmos3Uno;
);
)

(
// jugar cambiando este conjunto de Pseq's con el anterior
(
~pseqNotasDos=Pseq([~a,~b,~c,~d,~e].choose.scramble.midiratio*400,100000).asStream;
~pseqNotas2Dos=Pseq([~a,~b,~c,~d,~e].choose.scramble.midiratio*400,100000).asStream;
~pseqNotas3Dos=Pseq([~a,~b,~c,~d,~e].choose.scramble.midiratio*400,100000).asStream;
~pseqNotas=~pseqNotasDos;
~pseqNotas2=~pseqNotasDos;
~pseqNotas3=~pseqNotasDos;
);
(
~pseqRitmosDos=Pseq([~uno,~dos,~tres,~cuatro,~cinco].choose,100000).asStream;
~pseqRitmos2Dos=Pseq([~uno,~dos,~tres,~cuatro,~cinco].choose,100000).asStream;
~pseqRitmos3Dos=Pseq([~uno,~dos,~tres,~cuatro,~cinco].choose,100000).asStream;
~pseqNotas=~pseqNotasDos;
~pseqNotas2=~pseqNotasDos;
~pseqNotas3=~pseqNotasDos;
);
)

// Si quieres repetir los Pseq's que se eligieron puedes alternar entre los dos gupos siguientes:

(
~pseqNotas=~pseqNotasUno;
~pseqNotas2=~pseqNotasUno;
~pseqNotas3=~pseqNotasUno;

~pseqRitmos=~pseqRitmosUno;
~pseqRitmos2=~pseqRitmos2Uno;
~pseqRitmos3=~pseqRitmos3Uno;
)

(
~pseqNotas=~pseqNotasDos;
~pseqNotas2=~pseqNotasDos;
~pseqNotas3=~pseqNotasDos;

~pseqRitmos=~pseqRitmosDos;
~pseqRitmos2=~pseqRitmos2Dos;
~pseqRitmos3=~pseqRitmos3Dos;
)

(
(
Tdef(\rutina, {var elemento, notas;
			inf.do{|i|
				   elemento=~pseq.next;
				   notas=~pseqNotas.next;
				   Synth(\sonido, [\amp, elemento[0]*0.23*~amp1, \dur, elemento[1]*~tempo*2, \freq, notas, \pan, 0.5]);
				   (elemento[1]*~tempo*4).wait;
				   }
			})
);

(
Tdef(\rutina2, {var elemento, notas;
			inf.do{|i|
				   elemento=~pseq2.next;
				   notas=~pseqNotas2.next;
				   Synth(\sonido, [\amp, elemento[0]*0.23*~amp2, \dur, elemento[1]*~tempo, \freq, notas/2, \pan, -0.5]);
				   (elemento[1]*~tempo).wait;
				   }
			})
);

(
Tdef(\rutina3, {var elemento, notas;
			inf.do{|i|
				   elemento=~pseq3.next;
				   notas=~pseqNotas3.next;
				   Synth(\sonido, [\amp, elemento[0]*0.23*~amp3, \dur, elemento[1]*~tempo*2, \freq, notas/4, \pan, 0]);
				   (elemento[1]*~tempo*2).wait;
				   }
			})
);

(
Tdef(\bateria, {
			inf.do{|i|
				  if(~arrayBombo.find([i%32])!=nil,{Synth(\bombo, [\amp, 1*~ampBombo, \dur, 0.3, \freq, 60, \wrap, 0.9999]);});
				  if(~arrayTarola.find([i%16])!=nil,{Synth(\bombo, [\amp, 0.3755*~ampTarola, \dur, 0.23, \freq, 800, \wrap, 0.2345]);});
				  ((1/16)*~tempo).wait;
				   }
			})
);

)

Tdef(\rutina).play;
Tdef(\rutina2).play;
Tdef(\rutina3).play;
Tdef(\bateria).play

Tdef(\rutina).stop;
Tdef(\rutina2).stop;
Tdef(\rutina3).stop;
Tdef(\bateria).play