View this PageEdit this PageUploads to this PageHistory of this PageTop of the SwikiRecent ChangesSearch the SwikiHelp Guide

LiveSampleManglerPLUS-2 channel

Version 3.1
What this thing does is: whenever the input crosses the threshold level upwards (a variable you can set) it starts the clock and then when it drops to below, it adds those start and stop times to an array of startsamples and stop samples.
the players are a granular player, a spawning sample player and a chopper-upper. additionally, a new window controls a slow iteration through buffer 1, pseudo-granular style.
the sample playback player (control set 2) needs rates to choose from before pressing go, add them via z-m or a-k keys, option and the key takes them away from the set.
(	

var w, winClose, in1LevSlider, in1Lev, out1LevSlider, out2LevSlider,out3LevSlider, out1Lev, out2Lev;
var in1LevSlider2, in1Lev2, out1LevSlider2, out2LevSlider2,out3LevSlider2, out1Lev2, out2Lev2;
var inputLevel, granLevel, splayLevel, chopLevel;
var inputLevel2, granLevel2, splayLevel2, chopLevel2;
var timer, dur;
var pitch, pitchDisp, timeDisp, overlap, grainDur, pit, pD, tD, ol, gD;
var pitch2, pitchDisp2, timeDisp2, overlap2, grainDur2,pit2, pD2, tD2, ol2, gD2;
var wR, cR, rArray;
var granBut, playBut, chopBut;
var granBut2, playBut2, chopBut2;
var spawnGroup, chopGroup;
var sampleSections, startSample=0, stopSample=0, recordRoutine, inLevel=0, recTrigValue=0;
var loopAdd=0, chopRepeats=0;
var playSpawn, chopSpawn, granSpawn;
var playSpawn2, chopSpawn2, granSpawn2;
var spawnGroup2, chopGroup2;
var sampleSections2, startSample2=0, stopSample2=0, recordRoutine2, inLevel2=0, recTrigValue2=0;
var loopAdd2=0, chopRepeats2=0;
var lev1, levBus, granLev, granBus,lev2, levBus2, granLev2, granBus2;
var bClear, cClear, sampList1Clear, sampList2Clear;

var stretcher, stretchBut, stretchGroup;
var loopAddS=0, chopRepeatsS=0, bufSize, rateNoise;
var loopNum, repeatNum, travelNum;
var loop, loopSlider, repeats, repeatSlider, travel, travelSlider;
var levS, levSliderS, levNumS, levBusS;
var overlapS, olSlider, olNum;
var wS, panRangeSlider, panLow, panHigh, pLo, pHi, rateMenu, stretchRate;
var echoBuf, echoBut, echoStretch;


// Synthdefs

SynthDef("inputs1", { arg inSliderLevel=1;
	var violin, lMicIn, mix, in;
		violin = AudioIn.ar(1); 
		//in =  Compander.ar(violin,violin, 0.1, 1, 0.5, 0.01, 0.01)*inSliderLevel;  
		in = violin * inSliderLevel; 
	Out.ar(100, in);
}).load(s);

SynthDef("inputs2", { arg inSliderLevel=1;
	var micIn,  in;
		micIn = AudioIn.ar(2);
		//in =  Compander.ar(micIn,micIn, 0.1, 1, 0.5, 0.01, 0.01)*inSliderLevel;   
		in = micIn * inSliderLevel;
	Out.ar(101, in);
}).load(s);

SynthDef("SampleRecorder1",{ arg inBus, bufnum=0, recRun = 0, recTrig=0;
	var input;		
	input = In.ar(inBus);			
	RecordBuf.ar(input, bufnum, run: recRun, trigger: recTrig);
}).load(s);

SynthDef("PanSpawn", { arg panPos=0, gate = 1, rate = 1, bufnum = 0, chan=0,startPos=0.0, time=1.0, envLev=1.0, loopLength=1, outBus=0, revBus=1000;
	var out,eg, triggerer;
	triggerer = Impulse.kr(loopLength.reciprocal);
	eg = EnvGen.kr(Env.new([0,1,1,0],[0.1,0.8,0.1], 'sine'), gate, timeScale: time*1.5, levelScale: 1, doneAction: 2);
	out = Pan2.ar(
				PlayBuf.ar(1, bufnum, rate, triggerer, startPos, loop: 1), panPos);
	Out.ar(outBus, out*eg*envLev);
	Out.ar(revBus, out*eg*envLev);
}).load(s);

SynthDef("chop", { arg gate = 1, rate = 1, bufnum = 0,chan=0, startPos=0.0, time=1.0, envLev=1.0, panPos=0.0, loopLength=1, trig=1, outBus=0, revBus=1000;
	var out,eg, triggerer;
	triggerer = Impulse.kr(BufSampleRate.kr(bufnum)/loopLength);
	eg = EnvGen.kr(Env.new([0,1,1,0],[0.1,0.8,0.1]), gate, timeScale: time*1.1, levelScale: 1, doneAction: 2);
	out = Pan2.ar(PlayBuf.ar(1, bufnum, rate, triggerer, startPos, loop: 1), panPos);
	Out.ar(outBus, out*eg*envLev);
	Out.ar(revBus, out*eg*envLev);
}).load(s);

SynthDef("gran", { arg bufnum=0, rate=1, offset=0, level=1, panPos=0, envLength = 0.1, outBus=0, revBus=1000;
var granulated, env;
 	granulated=	Pan2.ar(PlayBuf.ar(1, bufnum, rate*Rand(0.95,1.05)*BufRateScale.kr(bufnum), 
				1, (offset+Rand(-0.05,0.05))*BufSamples.kr(bufnum),1),panPos);
	env=	EnvGen.kr(Env.new([0, 1, 0], [0.5,0.5], 'welch'), 1, timeScale: envLength, doneAction: 2);
			
		Out.ar(outBus,(granulated*env*level)*2);
		Out.ar(revBus,(granulated*env*level)*2);
}).load(s);

SynthDef("stretch", { arg gate = 1, rate = 1, bufnum = 0, startPos=0.0, time=1.0, envLev=0.0, panPos=0.0, loopLength=1, trig=1;
	var out,eg, triggerer;
	triggerer = Impulse.kr(BufSampleRate.kr(bufnum)/loopLength);
	eg = EnvGen.kr(Env.linen(0.1,0.2,0.1, 1,'welch'), gate, timeScale: time, levelScale: envLev, doneAction: 2);
	out = Pan2.ar(PlayBuf.ar(1, bufnum, rate, triggerer, BufFrames.ir(bufnum)*startPos, loop: 1), panPos);
	Out.ar(0, out*eg);
	Out.ar(1000, out*eg);
}).load(s);

SynthDef("echoStretch",
{arg out = 0, bufnum=1001, inBus=1000, level=0, delay=0.5, decay=1, panTime=1.0, panDepth=0.1;
var rev, input, output, delTime;
	input = In.ar(inBus);
	output = Pan2.ar(BufAllpassL.ar(bufnum, input, delay, decay, 0.8), LFNoise2.kr(panTime, panDepth));
  Out.ar(out,output * level);
}).load(s); 

SynthDef("noises", { arg trigRate=2; 
SendTrig.kr(Impulse.kr(trigRate),0, LFNoise1.kr(10, 4410, 4420));
SendTrig.kr(Impulse.kr(trigRate),1, LFNoise0.kr(100, 16,17));
	}).load(s);
	
SynthDef("level1", { arg inBus=100;
	SendTrig.kr(Impulse.kr(100),2,Amplitude.kr(In.ar(inBus),0.2,0.2));
}).load(s);
SynthDef("level2", { arg inBus=101;
	SendTrig.kr(Impulse.kr(100),3,Amplitude.kr(In.ar(inBus),0.2,0.2));
}).load(s);

SynthDef("noises2", { arg trigRate=2; 
SendTrig.kr(Impulse.kr(trigRate),4, LFNoise1.kr(10, 4410, 4420));
SendTrig.kr(Impulse.kr(trigRate),5, LFNoise0.kr(10, 160,170));
	}).load(s);


s=Server.local;




b = Buffer.alloc(s,44100 * 10.0,1);
c = Buffer.alloc(s,44100 * 10.0,1);
sampleSections = List[];
sampleSections2 = List[];


spawnGroup = Group.new;
chopGroup = Group.new;
spawnGroup2 = Group.new;
chopGroup2 = Group.new;

bufSize = BufSamples.ir(b.bufnum);
stretchGroup= Group.new;
stretchRate =[1];
Tempo.bpm = 100;
echoBuf = Buffer.alloc(s,44100*1.0,1);

// stretcher controls	
loopNum = ControlSpec(2,50,\linear,1);
repeatNum = ControlSpec(2,250,\linear,1);	
travelNum = ControlSpec(0.00001,0.01,\exponential,0.00001);
olNum = ControlSpec(0.2,4,\linear,0.01);	


levNumS = ControlSpec(0,1,\linear,0.001);
levBusS = Bus.new(\control,10,1,s);
levBusS.value=0.0;


// mangler controls
//MIDIIn.connect;
lev1=[ControlSpec(0,1,\linear,0.001),
	ControlSpec(0,1,\linear,0.001),
	ControlSpec(0,1,\linear,0.001),
	ControlSpec(0,1,\linear,0.001)];
levBus = [Bus.new(\control,1,1,s),
		Bus.new(\control,2,1,s),
		Bus.new(\control,3,1,s),
		Bus.new(\control,4,1,s)];
(levBus@0).value = 0.8;
(levBus@1).value = 0.8;
(levBus@2).value = 0.8;
(levBus@3).value = 0.8;


granLev=[ControlSpec(-2.0,2.0,\linear,0.001),  //pitch
	ControlSpec(0,4,\linear,0.001),     //pitch displacement
	ControlSpec(0,1,\linear,0.001),		//time displacement
	ControlSpec(0,8,\linear,0.1),		//overlap
	ControlSpec(0.1,2,\linear,0.01)];		//grain duration
granBus = [Bus.new(\control,12,1,s),
		Bus.new(\control,13,1,s),
		Bus.new(\control,14,1,s),
		Bus.new(\control,15,1,s),
		Bus.new(\control,16,1,s)
		];
(granBus@0).value = 1.0;
(granBus@1).value = 0.0;
(granBus@2).value = 0.0;
(granBus@3).value = 1.5;
(granBus@4).value = 0.25;

lev2=[ControlSpec(0,1,\linear,0.001),
	ControlSpec(0,1,\linear,0.001),
	ControlSpec(0,1,\linear,0.001),
	ControlSpec(0,1,\linear,0.001)];
levBus2 = [Bus.new(\control,5,1,s),
		Bus.new(\control,6,1,s),
		Bus.new(\control,7,1,s),
		Bus.new(\control,8,1,s)];
(levBus2@0).value = 0.8;
(levBus2@1).value = 0.8;
(levBus2@2).value = 0.8;
(levBus2@3).value = 0.8;


granLev2=[ControlSpec(-2.0,2.0,\linear,0.001),  //pitch
	ControlSpec(0,4,\linear,0.001),     //pitch displacement
	ControlSpec(0,1,\linear,0.001),		//time displacement
	ControlSpec(0,8,\linear,0.1),		//overlap
	ControlSpec(0.1,2,\linear,0.01)];		//grain duration
granBus2 = [Bus.new(\control,17,1,s),
		Bus.new(\control,18,1,s),
		Bus.new(\control,19,1,s),
		Bus.new(\control,20,1,s),
		Bus.new(\control,21,1,s)
		];
(granBus2@0).value = 1.0;
(granBus2@1).value = 0.0;
(granBus2@2).value = 0.0;
(granBus2@3).value = 1.5;
(granBus2@4).value = 0.25;


k=Synth("noises");
j=Synth("noises2");

z=Synth("inputs1",[\outBus, 100]).play;
y=Synth("inputs2",[\outBus, 101]).play;

x=Synth.after(z,"SampleRecorder1", [\inBus, 100, \bufnum, b.bufnum]).play;
u=Synth.after(y,"SampleRecorder1", [\inBus, 101, \bufnum, c.bufnum]).play;

Synth.after(x,"level1", [\inbus, 100]).play;
Synth.after(u,"level2", [\inBus, 101]).play;


OSCresponder(s.addr,'/tr',{ arg time, responder, msg;
	if(msg.at(2) == 5, {chopRepeats2 = msg.at(3)});
	if(msg.at(2) == 4, {loopAdd2 = msg.at(3)});
	if(msg.at(2) == 3, {inLevel2 = msg.at(3)});
	if(msg.at(2) == 2, {inLevel = msg.at(3)});
	if(msg.at(2) == 1, {chopRepeats = msg.at(3)});
	if(msg.at(2) == 0, {loopAdd = msg.at(3)});
}).add;


// routines

timer = TempoClock(110/60);
dur = timer.beatDur;

recordRoutine= Routine({
					var clock=0, threshold=0.02;
					x.set("recTrig", 1);
					loop({ 
					z.map("inSliderLevel", 1);
					if ( recTrigValue == 1,{ clock = clock+0.1 });
					if ( (inLevel > threshold) & recTrigValue==0,
						{ recTrigValue=1;
						  x.set("recRun",  1); // start recording
						  startSample =  (clock.poll*44.1e3)%(44.1e3*60.0);  
						},
						{ if ( (inLevel < threshold) &amp; recTrigValue==1,
						{ recTrigValue=0;
						  x.set("recRun",  0); // stop recording
 						  stopSample = (clock*44.1e3)%(44.1e3*60.0);
 						  sampleSections.add([startSample,stopSample]);
 						  
 						  })
 						  });
						0.1.wait;
						});
					});
				
recordRoutine.reset;
recordRoutine.play;






playSpawn=Routine({  
	var which, end, offset=0, loopDur,rate=1, nextTime;

//	OSCSched.global.tdeltaTillNext(4.0).wait;
   
   		loop({
			which = sampleSections.choose;			// choose a buffer at random
			if (which.notNil,{ 
				offset = which.at(0); end = (which.at(1))
				},{ offset = 0; end = 0; }
			);
			//which.postln;

		//rate = [-0.5, 0.875, -1.0, 1.2, -1.75, 2.0].choose;
		rArray.postln;
		rate = rArray.choose;
		loopDur=(end-offset/44.1e3)*(rate.abs.reciprocal);
		//loopDur.postln;
		nextTime =[1.4444, 2.8888, 5.7776 ].choose;
 		Synth("PanSpawn",[
 				\gate, 1,
 				\bufnum, b.bufnum,
				\time, nextTime,
				\startPos, offset,
				\rate, rate,
				\loopLength, loopDur,                
				
				\panPos, 1.0.rand2,  //(1.0.rand)-1
				],spawnGroup, \addToHead).map(\envLev,3);
				nextTime.wait;
		spawnGroup.set("gate", 0);
		[0,nextTime, nextTime*2].choose.wait;		//won't immediately retrigger	
			});			
});

chopSpawn=Routine({  
var which, end, choploopStart, choploopEnd, offset=0, chopDur, nextTime;
//	OSCSched.global.tdeltaTillNext(4.0).wait;
        loop({
        	which = sampleSections.choose;			// choose a buffer at random
			if (which.notNil,{ 
				offset = which.at(0); end = (which.at(1))
				},{ offset = 0; end = 0; }
			);
		choploopStart = offset;
		choploopEnd = offset+loopAdd;			
		chopDur = (choploopEnd - offset)/44.1e3 * (chopRepeats);

		//loopAdd= loopAdd/44.1e3;
		//chopDur=loopAdd * chopRepeats;
		nextTime= chopDur.max(0.02);
		which.postln;
		//[loopAdd/44.1e3,chopRepeats, nextTime].postln;
		
		k.set("trigRate",nextTime.reciprocal);
 		Synth("chop",
 				[\gate, 1,
 				\bufnum, b.bufnum,
				\time, nextTime,
				\startPos, offset,
				\rate, [0.5, 0.6, 0.5, 0.6,0.5, 0.45, 0.4, 0.75].choose,
				\loopLength, loopAdd,                //choploopEnd-choploopStart,
				\panPos, 1.0.rand2
				],chopGroup, \addToHead).map(\envLev,4);
				nextTime.wait;
				chopGroup.set("gate",0);			
			});
			
});



granSpawn=Routine({
var which, end,loopStart, loopEnd, offset=0, chopDur, nextTime=0.02, envTime, granLoop;
//	OSCSched.global.tdeltaTillNext(4.0).wait;

        loop({
        	
		envTime = [dur*4, dur*8].choose;
		//granLoop = (envTime/nextTime).roundUp;

        	which = sampleSections.choose;			// choose a buffer at random
			if (which.notNil,{ 
				offset = which.at(0); end = (which.at(1))
				},{ offset = 0; end = 0; }
			);

			loop({
			nextTime = (gD.poll*2)*dur;
			loopEnd=end*(tD.poll.rand);
			loopStart = offset+loopEnd;
					Synth("gran",[
						\bufnum, b.bufnum,
						\rate, pit.poll+((pD.poll).rand2),
						\offset, loopStart.asInteger,
						\envLength, ((ol.poll)*nextTime),
						\outBus, 0,
						\panPos, 1.0.rand2]).map(\level, 2);
					nextTime.wait;
					});
					
			envTime.wait;
			});
});

recordRoutine2= Routine({
					var clock=0, threshold=0.02;
					u.set("recTrig", 1);
					loop({ 
					y.map("inSliderLevel", 5);
					if ( recTrigValue2 == 1,{ clock = clock+0.1 });
					if ( (inLevel2 > threshold) &amp; recTrigValue2==0,
						{ recTrigValue2=1;
						  u.set("recRun",  1); // start recording
						  startSample2 =  (clock.poll*44.1e3)%(44.1e3*60.0);  
						},
						{ if ( (inLevel2 < threshold) &amp; recTrigValue2==1,
						{ recTrigValue2=0;
						  u.set("recRun",  0); // stop recording
 						  stopSample2 = (clock*44.1e3)%(44.1e3*60.0);
 						  sampleSections2.add([startSample2,stopSample2]);
 						  
 						  })
 						  });
						0.1.wait;
						});
					});
				
recordRoutine2.reset;
recordRoutine2.play;

Routine({
	loop({
		[sampleSections,sampleSections2].postln;
		[inLevel,inLevel2].postln;
		10.0.wait;
		});
	}).play;

/*
Routine({
	loop({
		[((sampleSections.at(1))-(sampleSections.at(0)))/44.1e3,
		((sampleSections2.at(1))-(sampleSections2.at(0)))/44.1e3].postln;
		10.0.wait;
		});
	}).play;
Routine({
	loop({
	if ((sampleSections@0 && sampleSections@1 && sampleSections2@0 && sampleSections2@1).notNil, {
		[sampleSections.at(1),sampleSections.at(0),
		sampleSections2.at(1),sampleSections2.at(0)].postln;
		});
		10.0.wait;
		});
	}).play;

*/

playSpawn2=Routine({  
	var which, end, offset=0, loopDur, rate=1, nextTime;

//	OSCSched.global.tdeltaTillNext(4.0).wait;
   
   		loop({
			which = sampleSections2.choose;
			if (which.notNil,{ 
				offset = which.at(0); end = (which.at(1))
				},{ offset = 0; end = 0; }
			);
			//which.postln;

		//rate = [-0.5, 0.875, -1.0, 1.2, -1.75, 2.0].choose;
		//rArray.postln;
		rate = rArray.choose;
		loopDur=(end-offset/44.1e3)*(rate.abs.reciprocal);
		//loopDur.postln;
		nextTime =[1.4444, 2.8888, 5.7776].choose;
 		Synth("PanSpawn",[
 				\gate, 1,
 				\bufnum, c.bufnum,
				\time, nextTime,
				\startPos, offset,
				\rate, rate,
				\loopLength, loopDur,                
				\panPos, 1.0.rand2
				],spawnGroup2, \addToHead).map(\envLev,7);
				nextTime.wait;
		spawnGroup2.set("gate", 0);
		[0,nextTime, nextTime*2].choose.wait;		
			});			
});

chopSpawn2=Routine({  
var which, end, choploopStart, choploopEnd, offset=0, chopDur=1, nextTime;
		//	OSCSched.global.tdeltaTillNext(4.0).wait;
        loop({

        	which = sampleSections2.choose;			// choose a buffer at random
			if (which.notNil,{ 
				offset = which.at(0); end = (which.at(1))
				},{ offset = 0; end = 0; }
			);

		//offset =  offset+100;   //(offset + (chopDur*0.7))%(12.0*44.1e3);
		choploopStart = offset;
		choploopEnd = offset+loopAdd2;			
		chopDur = (choploopEnd - offset)/44.1e3 * (chopRepeats2);

		//loopAdd= loopAdd/44.1e3;
		//chopDur=loopAdd * chopRepeats;

		nextTime= chopDur.max(0.02).round(dur*0.25);
		//which.postln;
		//[loopAdd/44.1e3,chopRepeats, nextTime].postln;
		
		j.set("trigRate",nextTime.reciprocal);
 		Synth("chop",
 				[\gate, 1,
 				\bufnum, c.bufnum,
				\time, nextTime,
				\startPos, offset,
				\rate, [0.5, 0.6, 0.5, 0.6,0.5, 0.45, 0.4, 0.75].choose,

				\loopLength, loopAdd2,    //choploopEnd-choploopStart,

				\panPos, 1.0.rand2
				],chopGroup2, \addToHead).map(\envLev,8);
				nextTime.wait;
				chopGroup2.set("gate",0);			
			});
			
});



granSpawn2=Routine({
var which, end,loopStart, loopEnd, offset=0, chopDur, nextTime=0.02, envTime, granLoop;
//	OSCSched.global.tdeltaTillNext(4.0).wait;
		

        loop({
        	
		envTime = [dur*4, dur*8, dur*2].choose;
		//granLoop = (envTime/nextTime).roundUp;

        	which = sampleSections2.choose;			// choose a buffer at random
			if (which.notNil,{ 
				offset = which.at(0); end = (which.at(1))
				},{ offset = 0; end = 0; }
			);

			loop({
			nextTime = (gD2.poll*2)*dur;
			loopEnd=end*(tD2.poll.rand);
			loopStart = offset+loopEnd;
					Synth("gran",[
						\bufnum, c.bufnum,
						\rate, pit2.poll+((pD2.poll).rand2),
						\offset, loopStart.asInteger,
						\envLength, ((ol2.poll)*nextTime),
						\panPos, 1.0.rand2
						]).map(\level, 6);
					nextTime.wait;
					});
					
			envTime.wait;
			});
});


stretcher=Routine({  
var which, offset=0, chopDur, nextTime;

//	OSCSched.global.tdeltaTillNext(4.0).wait;
	
	/*     //for recorded buffer chopped into array bits
			which = soundArray.choose;			// choose a buffer at random
			if (which.notNil,{ 
				offset = which.at(0); end = (which.at(1))
				},{ offset = 0; end = 0; }
			);
	*/
	

	offset =0.0;
	//offset=b.size.rand;
        loop({

		//choploopStart = offset;
		//choploopEnd = offset+loopAddS;			
		//chopDur = (choploopEnd - offset)/44.1e3 * (chopRepeatsS);
		/*
		chopRepeatsS = rrand(50,150);
		loopAddS= rrand(10,25);
		*/
		chopRepeatsS=(repeats.poll.value + ((repeats.poll.value)*0.1.rand2)).asInteger;
		loopAddS = (loop.poll.value + ((loop.poll.value)*0.1.rand2)).asInteger;
		
		chopDur=(loopAddS.value * chopRepeatsS.value)/44.1e3;
		nextTime= chopDur.max(0.02);
		
		//[loopAddS,chopRepeatsS,chopDur, nextTime, offset].postln;
		
		//[pLo.value, pHi.value].postln;
		
		k.set("trigRate",loopAddS.reciprocal);
 		Synth("stretch", [
 				\gate, 1,
 				\bufnum, b.bufnum,
				\time, nextTime*overlapS.poll,
				\startPos, offset,
				\rate, stretchRate.choose, //rateNoise, 
				\loopLength, loopAddS,   	
			       \panPos, rrand(pLo.value, pHi.value),
				],stretchGroup, \addToHead).map(\envLev,10);
				nextTime.wait;
				offset = (offset + travel.poll+ ((travel.poll)*0.1.rand2))%1.0;  
		stretchGroup.set("gate",0);			
			});
			
});
echoStretch = Synth.tail(stretchGroup, "echoStretch", [
					\bufnum, echoBuf.bufnum,
					\delay, 0.2,
					\decay,0.8,
					\panTime, 1,
					\panDepth, pHi.value,
					\out, 0]).map(\level,10).run(false);



// windows


w = SCWindow("SampleSpawn", Rect(35, 380, 940, 387)).front; 

w.view.background = HiliteGradient(Color.new255(50, 60, 40), Color.new255(138, 43, 226), \v, 128, 0.33);

granBut =  SCButton(w, Rect(130, 23, 100, 20 ))
        .states_([
                ["Start Gran", Color.black, Color.new255(34, 189, 34)], ["Stop Gran", Color.white, Color.new255(205, 38, 38)]
        ])
        .action = {
                if (granBut.value == 1, {
                        granSpawn.reset;
                        SystemClock.play(granSpawn);
                }, {
                        granSpawn.stop;
                });
        };
        
granBut.setProperty(\font, Font("Trixie-Plain", 15));       
        
playBut =  SCButton(w, Rect(230, 23, 100, 20))
        .states_([
                ["Start Spawn", Color.black, Color.new255(34, 189, 34)], ["Stop Spawn", Color.white, Color.new255(205, 38, 38)]
        ])
        .action = {
                if (playBut.value == 1, {
                        playSpawn.reset;
                        SystemClock.play(playSpawn);
                }, {
                        playSpawn.stop;
                        spawnGroup.set("gate", 0);
                });
        };

playBut.setProperty(\font, Font("Trixie-Plain", 15));       
        
 chopBut =  SCButton(w, Rect(330, 23, 100, 20))
        .states_([
                ["Start Chop", Color.black, Color.new255(34, 189, 34)], ["Stop Chop", Color.white, Color.new255(205, 38, 38)]
        ]).action = {
                if (chopBut.value == 1, {
                        chopSpawn.reset;
                        SystemClock.play(chopSpawn);
                }, {
                        chopSpawn.stop;
                        chopGroup.set("gate",0);
                });
        };
chopBut.setProperty(\font, Font("Trixie-Plain", 15));      

inputLevel = SCNumberBox(w, Rect(45, 212, 50, 18));
inputLevel.setProperty(\align,\center);
inputLevel.setProperty(\background, HiliteGradient(Color.new255(60, 60, 0), Color.white, \v, 128, 0.3););
inputLevel.setProperty(\font, Font("Trixie-Plain", 14));
inputLevel.action = {in1LevSlider.value_((lev1@0).unmap(inputLevel.value));
                                        (levBus@0).value = inputLevel.value};

in1LevSlider = SCSlider(w, Rect( 45, 50, 50,160));
in1LevSlider.value_((lev1@0).unmap(0.8));
in1LevSlider.setProperty(\background, HiliteGradient(Color.black,Color.new255(60, 60, 0), \h, 128, 0.3););
in1LevSlider.action = {(levBus@0).value = (lev1@0).map(in1LevSlider.value);
                                inputLevel.value_(((lev1@0).map(in1LevSlider.value)));
                                };
inputLevel.value_(((lev1@0).map(in1LevSlider.value)));

SCStaticText( w, Rect(45, 232, 50, 18)).string_("Input").align_(\center).setProperty(\font, Font("Trixie-Plain", 15), \background, HiliteGradient(Color.new255(139, 117, 0),Color.new255(200, 200, 255), \v, 128, 0.3));



granLevel = SCNumberBox(w, Rect(160, 212, 40, 18));
granLevel.setProperty(\align,\center);
granLevel.setProperty(\background, HiliteGradient(Color.new255(60, 60, 0), Color.white, \v, 128, 0.3););
granLevel.setProperty(\font, Font("Trixie-Plain", 14));
granLevel.action = {out1LevSlider.value_((lev1@1).unmap(granLevel.value));
                                        (levBus@1).value = granLevel.value};

out1LevSlider = SCSlider(w, Rect(160, 50, 40, 160));
out1LevSlider.value_((lev1@1).unmap(0.8));
out1LevSlider.setProperty(\background, HiliteGradient(Color.black,Color.new255(60, 60, 0), \h, 128, 0.3););
out1LevSlider.action = {(levBus@1).value = (lev1@1).map(out1LevSlider.value);
                                granLevel.value_((lev1@1).map(out1LevSlider.value));
                                };
granLevel.value_((lev1@1).map(out1LevSlider.value));

SCStaticText( w, Rect(160, 232, 40, 18)).string_("Gran").align_(\center).setProperty(\font, Font("Trixie-Plain", 15),\background, HiliteGradient(Color.new255(139, 117, 0),Color.new255(200, 200, 255), \v, 128, 0.3));

//

splayLevel = SCNumberBox(w, Rect(260, 212, 40, 18));
splayLevel.setProperty(\align,\center);
splayLevel.setProperty(\background, HiliteGradient(Color.new255(60, 60, 0), Color.white, \v, 128, 0.3););
splayLevel.setProperty(\font, Font("Trixie-Plain", 14));
splayLevel.action = {out2LevSlider.value_((lev1@2).unmap(splayLevel.value));
                                        (levBus@2).value = splayLevel.value};

out2LevSlider = SCSlider(w, Rect(260, 50, 40, 160));
out2LevSlider.value_((lev1@2).unmap(0.8));
out2LevSlider.setProperty(\background, HiliteGradient(Color.black,Color.new255(60, 60, 0), \h, 128, 0.3););
out2LevSlider.action = {(levBus@2).value = (lev1@2).map(out2LevSlider.value);
                                splayLevel.value_(((lev1@2).map(out2LevSlider.value)));
                                };
splayLevel.value_(((lev1@2).map(out2LevSlider.value)));

SCStaticText( w, Rect(255, 232, 50, 18)).string_("Spawn").align_(\center).setProperty(\font, Font("Trixie-Plain", 15), \background, HiliteGradient(Color.new255(139, 117, 0),Color.new255(200, 200, 255), \v, 128, 0.3));



chopLevel = SCNumberBox(w, Rect(360, 212, 40, 18));
chopLevel.setProperty(\align,\center);
chopLevel.setProperty(\background, HiliteGradient(Color.new255(60, 60, 0), Color.white, \v, 128, 0.3););
chopLevel.setProperty(\font, Font("Trixie-Plain", 14));
chopLevel.action = {out3LevSlider.value_((lev1@3).unmap(chopLevel.value));
                                        (levBus@3).value = chopLevel.value};

out3LevSlider = SCSlider(w, Rect(360, 50, 40, 160));
out3LevSlider.value_((lev1@3).unmap(0.8));
out3LevSlider.setProperty(\background, HiliteGradient(Color.black,Color.new255(60, 60, 0), \h, 128, 0.3););
out3LevSlider.action = {(levBus@3).value = (lev1@3).map(out3LevSlider.value);
                                chopLevel.value_(((lev1@3).map(out3LevSlider.value)));
                                };
chopLevel.value_(((lev1@3).map(out3LevSlider.value)));

SCStaticText( w, Rect(360, 232, 40, 18)).string_("Chop").align_(\center).setProperty(\font, Font("Trixie-Plain", 15), \background, HiliteGradient(Color.new255(139, 117, 0),Color.new255(200, 200, 255), \v, 128, 0.3));

//




pit = SCNumberBox(w, Rect(190, 269, 50, 20));
pit.setProperty(\align,\center);
pit.setProperty(\background, HiliteGradient(Color.new255(60, 60, 0), Color.white, \v, 128, 0.3););
pit.setProperty(\font, Font("Trixie-Plain", 12));
pit.action = {pitch.value_((granLev@0).unmap(pit.value));
                                        (granBus@0).value = pit.value};

pitch = SCSlider(w, Rect(37, 269, 150, 20));
pitch.value_((granLev@0).unmap(1.0));
pitch.setProperty(\background, HiliteGradient(Color.black,Color.new255(60, 60, 0), \v, 128, 0.3););
pitch.action = {(granBus@0).value = (granLev@0).map(pitch.value);
                                pit.value_(((granLev@0).map(pitch.value)));
                                };
pit.value_(((granLev@0).map(pitch.value)));



pD = SCNumberBox(w, Rect(190, 293, 50, 20));
pD.setProperty(\align,\center);
pD.setProperty(\background, HiliteGradient(Color.new255(60, 60, 0), Color.white, \v, 128, 0.3););
pD.setProperty(\font, Font("Trixie-Plain", 12));
pD.action = {pitchDisp.value_((granLev@1).unmap(pD.value));
                                        (granBus@1).value = pD.value};

pitchDisp = SCSlider(w, Rect(37, 293, 150,20));
pitchDisp.value_((granLev@1).unmap(0.0));
pitchDisp.setProperty(\background, HiliteGradient(Color.black,Color.new255(60, 60, 0), \v, 128, 0.3););
pitchDisp.action = {(granBus@1).value = (granLev@1).map(pitchDisp.value);
                                pD.value_(((granLev@1).map(pitchDisp.value)));
                                };
pD.value_(((granLev@1).map(pitchDisp.value)));



tD = SCNumberBox(w, Rect(190, 317, 50, 20));
tD.setProperty(\align,\center);
tD.setProperty(\background, HiliteGradient(Color.new255(60, 60, 0), Color.white, \v, 128, 0.3););
tD.setProperty(\font, Font("Trixie-Plain", 12));
tD.action = {timeDisp.value_((granLev@2).unmap(tD.value));
                                        (granBus@2).value = tD.value};

timeDisp = SCSlider(w, Rect(37, 317, 150, 20));
timeDisp.value_((granLev@0).unmap(0.0));
timeDisp.setProperty(\background, HiliteGradient(Color.black,Color.new255(60, 60, 0), \v, 128, 0.3););
timeDisp.action = {(granBus@2).value = (granLev@2).map(timeDisp.value);
                                tD.value_(((granLev@2).map(timeDisp.value)));
                                };
tD.value_(((granLev@2).map(timeDisp.value)));



ol = SCNumberBox(w, Rect(190, 341, 50, 20));
ol.setProperty(\align,\center);
ol.setProperty(\background, HiliteGradient(Color.new255(60, 60, 0), Color.white, \v, 128, 0.3););
ol.setProperty(\font, Font("Trixie-Plain", 12));
ol.action = {overlap.value_((granLev@3).unmap(ol.value));
                                        (granBus@3).value = ol.value};

overlap = SCSlider(w, Rect(37, 341, 150, 20));
overlap.value_((granLev@3).unmap(1.5));
overlap.setProperty(\background, HiliteGradient(Color.black,Color.new255(60, 60, 0), \v, 128, 0.3););
overlap.action = {(granBus@3).value = (granLev@3).map(overlap.value);
                                ol.value_(((granLev@3).map(overlap.value)));
                                };
ol.value_(((granLev@3).map(overlap.value)));



gD = SCNumberBox(w, Rect(398, 269, 50, 20));
gD.setProperty(\align,\center);
gD.setProperty(\background, HiliteGradient(Color.new255(60, 60, 0), Color.white, \v, 128, 0.3););
gD.setProperty(\font, Font("Trixie-Plain", 12));
gD.action = {grainDur.value_((granLev@4).unmap(gD.value));
                                        (granBus@4).value = gD.value};

grainDur = SCSlider(w, Rect(300, 269, 96, 20));
grainDur.value_((granLev@0).unmap(0.25));
grainDur.setProperty(\background, HiliteGradient(Color.black,Color.new255(60, 60, 0), \v, 128, 0.3););
grainDur.action = {(granBus@4).value = (granLev@4).map(grainDur.value);
                                gD.value_(((granLev@4).map(grainDur.value)));
                                };
gD.value_(((granLev@4).map(grainDur.value)).round(0.01));


SCStaticText( w, Rect(242, 269, 50, 20)).string_("pitch").align_(\left).setProperty(\font, Font("Trixie-Plain", 13));
SCStaticText( w, Rect(242, 293, 70, 20)).string_("pitch Disp").align_(\left).setProperty(\font, Font("Trixie-Plain", 13));
SCStaticText( w, Rect(242, 317, 70, 20)).string_("time Disp").align_(\left).setProperty(\font, Font("Trixie-Plain", 13));
SCStaticText( w, Rect(242, 341, 50, 20)).string_("overlap").align_(\left).setProperty(\font, Font("Trixie-Plain", 13));
SCStaticText( w, Rect(320, 293, 110, 20)).string_("grain duration").align_(\center).setProperty(\font, Font("Trixie-Plain", 13));






bClear = SCButton(w, Rect(310, 323, 70, 20))
        .states_([
                ["Clear Buf", Color.black, Color.rand], ["Clear Buf", Color.white, Color.rand]
        ]).action = {b.zero};
 
bClear.setProperty(\font, Font("Trixie-Plain", 11));

sampList1Clear = SCButton(w, Rect(382, 323, 70, 20))
        .states_([
                ["Clear List", Color.black, Color.rand], ["Clear List", Color.white, Color.rand]
        ]).action = {sampleSections.clear};
 
sampList1Clear.setProperty(\font, Font("Trixie-Plain", 11));  

    


//window 2






granBut2 =  SCButton(w, Rect(595, 23, 100, 20 ))
        .states_([
                ["Start Gran2", Color.black, Color.new255(34, 189, 34)], ["Stop Gran 2", Color.white, Color.new255(205, 38, 38)]
        ])
        .action = {
                if (granBut2.value == 1, {
                        granSpawn2.reset;
                        SystemClock.play(granSpawn2);
                }, {
                        granSpawn2.stop;
                });
        };
        
granBut2.setProperty(\font, Font("Trixie-Plain", 15));       
        
playBut2 =  SCButton(w, Rect(695, 23, 100, 20))
        .states_([
                ["Start Spawn2", Color.black, Color.new255(34, 189, 34)], ["Stop Spawn 2", Color.white, Color.new255(205, 38, 38)]
        ])
        .action = {
                if (playBut2.value == 1, {
                        playSpawn2.reset;
                        SystemClock.play(playSpawn2);
                }, {
                        playSpawn2.stop;
                        spawnGroup2.set("gate", 0);
                });
        };

playBut2.setProperty(\font, Font("Trixie-Plain", 15));       
        
chopBut2 =  SCButton(w, Rect(795, 23, 100, 20))
        .states_([
                ["Start Chop2", Color.black, Color.new255(34, 189, 34)], ["Stop Chop 2", Color.white, Color.new255(205, 38, 38)]
        ]).action = {
                if (chopBut2.value == 1, {
                        chopSpawn2.reset;
                        SystemClock.play(chopSpawn2);
                }, {
                        chopSpawn2.stop;
                        chopGroup2.set("gate",0);
                });
        };
chopBut2.setProperty(\font, Font("Trixie-Plain", 15));      

inputLevel2 = SCNumberBox(w, Rect(500, 212, 50, 18));
inputLevel2.setProperty(\align,\center);
inputLevel2.setProperty(\background, HiliteGradient(Color.new255(60, 60, 0), Color.white, \v, 128, 0.3););
inputLevel2.setProperty(\font, Font("Trixie-Plain", 14));
inputLevel2.action = {in1LevSlider.value_((lev2@0).unmap(inputLevel2.value));
                                        (levBus2@0).value = inputLevel2.value};

in1LevSlider2 = SCSlider(w, Rect( 500, 50, 50,160));
in1LevSlider2.value_((lev2@0).unmap(0.8));
in1LevSlider2.setProperty(\background, HiliteGradient(Color.black,Color.new255(60, 60, 0), \h, 128, 0.3););
in1LevSlider2.action = {(levBus2@0).value = (lev2@0).map(in1LevSlider2.value);
                                inputLevel2.value_(((lev2@0).map(in1LevSlider2.value)));
                                };
inputLevel2.value_(((lev2@0).map(in1LevSlider2.value)));

SCStaticText( w, Rect(508, 232, 50, 18)).string_("Input 2").align_(\center).setProperty(\font, Font("Trixie-Plain", 15), \background, HiliteGradient(Color.new255(139, 117, 0),Color.new255(200, 200, 255), \v, 128, 0.3));



granLevel2 = SCNumberBox(w, Rect(625, 212, 40, 18));
granLevel2.setProperty(\align,\center);
granLevel2.setProperty(\background, HiliteGradient(Color.new255(60, 60, 0), Color.white, \v, 128, 0.3););
granLevel2.setProperty(\font, Font("Trixie-Plain", 14));
granLevel2.action = {out1LevSlider2.value_((lev2@1).unmap(granLevel2.value));
                                        (levBus2@1).value = granLevel2.value};

out1LevSlider2 = SCSlider(w, Rect(625, 50, 40, 160));
out1LevSlider2.value_((lev2@1).unmap(0.8));
out1LevSlider2.setProperty(\background, HiliteGradient(Color.black,Color.new255(60, 60, 0), \h, 128, 0.3););
out1LevSlider2.action = {(levBus2@1).value = (lev2@1).map(out1LevSlider2.value);
                                granLevel2.value_((lev2@1).map(out1LevSlider2.value));
                                };
granLevel2.value_((lev2@1).map(out1LevSlider2.value));

SCStaticText( w, Rect(628, 232, 40, 18)).string_("Gran 2").align_(\center).setProperty(\font, Font("Trixie-Plain", 15),\background, HiliteGradient(Color.new255(139, 117, 0),Color.new255(200, 200, 255), \v, 128, 0.3));

//

splayLevel2 = SCNumberBox(w, Rect(725, 212, 40, 18));
splayLevel2.setProperty(\align,\center);
splayLevel2.setProperty(\background, HiliteGradient(Color.new255(60, 60, 0), Color.white, \v, 128, 0.3););
splayLevel2.setProperty(\font, Font("Trixie-Plain", 14));
splayLevel2.action = {out2LevSlider2.value_((lev2@2).unmap(splayLevel2.value));
                                        (levBus2@2).value = splayLevel2.value};

out2LevSlider2 = SCSlider(w, Rect(725, 50, 40, 160));
out2LevSlider2.value_((lev2@2).unmap(0.8));
out2LevSlider2.setProperty(\background, HiliteGradient(Color.black,Color.new255(60, 60, 0), \h, 128, 0.3););
out2LevSlider2.action = {(levBus2@2).value = (lev2@2).map(out2LevSlider2.value);
                                splayLevel2.value_(((lev2@2).map(out2LevSlider2.value)));
                                };
splayLevel2.value_(((lev2@2).map(out2LevSlider2.value)));

SCStaticText( w, Rect(725, 232, 50, 18)).string_("Spawn").align_(\center).setProperty(\font, Font("Trixie-Plain", 15), \background, HiliteGradient(Color.new255(139, 117, 0),Color.new255(200, 200, 255), \v, 128, 0.3));



chopLevel2 = SCNumberBox(w, Rect(825, 212, 40, 18));
chopLevel2.setProperty(\align,\center);
chopLevel2.setProperty(\background, HiliteGradient(Color.new255(60, 60, 0), Color.white, \v, 128, 0.3););
chopLevel2.setProperty(\font, Font("Trixie-Plain", 14));
chopLevel2.action = {out3LevSlider2.value_((lev2@3).unmap(chopLevel2.value));
                                        (levBus2@3).value = chopLevel2.value};

out3LevSlider2 = SCSlider(w, Rect(825, 50, 40, 160));
out3LevSlider2.value_((lev2@3).unmap(0.8));
out3LevSlider2.setProperty(\background, HiliteGradient(Color.black,Color.new255(60, 60, 0), \h, 128, 0.3););
out3LevSlider2.action = {(levBus2@3).value = (lev2@3).map(out3LevSlider2.value);
                                chopLevel2.value_(((lev2@3).map(out3LevSlider2.value)));
                                };
chopLevel2.value_(((lev2@3).map(out3LevSlider2.value)));

SCStaticText( w, Rect(825, 232, 40, 18)).string_("Chop").align_(\center).setProperty(\font, Font("Trixie-Plain", 15), \background, HiliteGradient(Color.new255(139, 117, 0),Color.new255(200, 200, 255), \v, 128, 0.3));





pit2 = SCNumberBox(w, Rect(655, 269, 50, 20));
pit2.setProperty(\align,\center);
pit2.setProperty(\background, HiliteGradient(Color.new255(60, 60, 0), Color.white, \v, 128, 0.3););
pit2.setProperty(\font, Font("Trixie-Plain", 12));
pit2.action = {pitch2.value_((granLev2@0).unmap(pit2.value));
                                        (granBus2@0).value = pit.value};

pitch2 = SCSlider(w, Rect(502, 269, 150, 20));
pitch2.value_((granLev2@0).unmap(1.0));
pitch2.setProperty(\background, HiliteGradient(Color.black,Color.new255(60, 60, 0), \v, 128, 0.3););
pitch2.action = {(granBus2@0).value = (granLev2@0).map(pitch2.value);
                                pit2.value_(((granLev2@0).map(pitch2.value)));
                                };
pit2.value_(((granLev2@0).map(pitch2.value)));



pD2 = SCNumberBox(w, Rect(655, 293, 50, 20));
pD2.setProperty(\align, \center);
pD2.setProperty(\background, HiliteGradient(Color.new255(60, 60, 0), Color.white, \v, 128, 0.3););
pD2.setProperty(\font, Font("Trixie-Plain", 12));
pD2.action = {pitchDisp2.value_((granLev2@1).unmap(pD2.value));
                                        (granBus2@1).value = pD2.value};

pitchDisp2 = SCSlider(w, Rect(502, 293, 150,20));
pitchDisp2.value_((granLev2@1).unmap(0.0));
pitchDisp2.setProperty(\background, HiliteGradient(Color.black,Color.new255(60, 60, 0), \v, 128, 0.3););
pitchDisp2.action = {(granBus2@1).value = (granLev2@1).map(pitchDisp2.value);
                                pD2.value_(((granLev2@1).map(pitchDisp2.value)));
                                };
pD2.value_(((granLev2@1).map(pitchDisp2.value)));



tD2 = SCNumberBox(w, Rect(655, 317, 50, 20));
tD2.setProperty(\align,\center);
tD2.setProperty(\background, HiliteGradient(Color.new255(60, 60, 0), Color.white, \v, 128, 0.3););
tD2.setProperty(\font, Font("Trixie-Plain", 12));
tD2.action = {timeDisp2.value_((granLev2@2).unmap(tD2.value));
                                        (granBus2@2).value = tD2.value};

timeDisp2 = SCSlider(w, Rect(502, 317, 150, 20));
timeDisp2.value_((granLev@0).unmap(0.0));
timeDisp2.setProperty(\background, HiliteGradient(Color.black,Color.new255(60, 60, 0), \v, 128, 0.3););
timeDisp2.action = {(granBus2@2).value = (granLev2@2).map(timeDisp2.value);
                                tD2.value_(((granLev2@2).map(timeDisp2.value)));
                                };
tD2.value_(((granLev2@2).map(timeDisp2.value)));



ol2 = SCNumberBox(w, Rect(655, 341, 50, 20));
ol2.setProperty(\align,\center);
ol2.setProperty(\background, HiliteGradient(Color.new255(60, 60, 0), Color.white, \v, 128, 0.3););
ol2.setProperty(\font, Font("Trixie-Plain", 12));
ol2.action = {overlap2.value_((granLev2@3).unmap(ol2.value));
                                        (granBus2@3).value = ol2.value};

overlap2 = SCSlider(w, Rect(502, 341, 150, 20));
overlap2.value_((granLev2@3).unmap(1.5));
overlap2.setProperty(\background, HiliteGradient(Color.black,Color.new255(60, 60, 0), \v, 128, 0.3););
overlap2.action = {(granBus2@3).value = (granLev2@3).map(overlap2.value);
                                ol2.value_(((granLev2@3).map(overlap2.value)));
                                };
ol2.value_(((granLev2@3).map(overlap2.value)));



gD2 = SCNumberBox(w, Rect(863, 269, 50, 20));
gD2.setProperty(\align,\center);
gD2.setProperty(\background, HiliteGradient(Color.new255(60, 60, 0), Color.white, \v, 128, 0.3););
gD2.setProperty(\font, Font("Trixie-Plain", 12));
gD2.action = {grainDur2.value_((granLev@4).unmap(gD2.value));
                                        (granBus@4).value = gD2.value};

grainDur2 = SCSlider(w, Rect(765, 269, 96, 20));
grainDur2.value_((granLev@0).unmap(0.25));
grainDur2.setProperty(\background, HiliteGradient(Color.black,Color.new255(60, 60, 0), \v, 128, 0.3););
grainDur2.action = {(granBus@4).value = (granLev@4).map(grainDur2.value);
                                gD2.value_(((granLev@4).map(grainDur2.value)));
                                };
gD2.value_(((granLev@4).map(grainDur2.value)).round(0.01));


SCStaticText( w, Rect(707, 269, 50, 20)).string_("pitch").align_(\left).setProperty(\font, Font("Trixie-Plain", 13));
SCStaticText( w, Rect(707, 293, 70, 20)).string_("pitch Disp").align_(\left).setProperty(\font, Font("Trixie-Plain", 13));
SCStaticText( w, Rect(707, 317, 70, 20)).string_("time Disp").align_(\left).setProperty(\font, Font("Trixie-Plain", 13));
SCStaticText( w, Rect(707, 341, 50, 20)).string_("overlap").align_(\left).setProperty(\font, Font("Trixie-Plain", 13));
SCStaticText( w, Rect(785, 293, 110, 20)).string_("grain duration").align_(\center).setProperty(\font, Font("Trixie-Plain", 13));




cClear = SCButton(w, Rect(775, 323, 70, 20))
        .states_([
                ["Clear Buf", Color.black, Color.rand], ["Clear Buf", Color.white, Color.rand]
        ]).action = {c.zero};
 
cClear.setProperty(\font, Font("Trixie-Plain", 12));

sampList2Clear = SCButton(w, Rect(847, 323, 70, 20))
        .states_([
                ["ClearList", Color.black, Color.rand], ["ClearList", Color.white, Color.rand]
        ]).action = {sampleSections2.clear};
 
sampList2Clear.setProperty(\font, Font("Trixie-Plain", 12));  


// Stretch Window

wS = SCWindow("stretch", Rect(275, 10, 260, 320)).front; 
wS.view.background = Gradient(Color.new255(50, 60, 40), Color.new255(69, 139, 116), \v, 128, 0.6);

				
stretchBut =  SCButton(wS, Rect(15, 15, 80, 20))
        .states_([
                ["stretch", Color.black, Color.new255(69, 239, 116)], ["Stop", Color.white, Color.new255(150, 60, 40)]
        ])
        .action = {
                if (stretchBut.value == 1, {
                       stretcher.reset;
                        SystemClock.play(stretcher);
                }, {
                        stretcher.stop;
                        stretchGroup.set(\gate,0);
                });
        };
stretchBut.setProperty(\font, Font("Trixie-Plain", 15)); 

rateMenu=SCPopUpMenu(wS,Rect(100,15,140,20));
rateMenu.items = [ "normal", "norm + [-8va]", "norm+[-8va,+8va]", "norm + [+8va]","[-8va]", "[+8va]" ];
rateMenu.setProperty(\font, Font("Trixie-Plain", 15)); 
rateMenu.setProperty(\background, HiliteGradient(Color.new255(69, 239, 116), Color.white, \v, 128, 0.3););
rateMenu.action = {
				if (rateMenu.value == 0, {stretchRate = [1]}, 
				{if (rateMenu.value == 1, {stretchRate = [1,0.5]},
				{if (rateMenu.value == 2, {stretchRate = [1, 0.5,2]},
				{if (rateMenu.value == 3, {stretchRate = [1,2]},
				{if (rateMenu.value == 4, {stretchRate = [0.5]},
				{if (rateMenu.value == 5, {stretchRate = [2]})
				})})})})}
				)};
				

        
loop = SCNumberBox(wS, Rect(10, 212, 40, 18));
loop.setProperty(\align,\center);
loop.setProperty(\background, HiliteGradient(Color.new255(60, 60, 0), Color.white, \v, 128, 0.3););
loop.setProperty(\font, Font("American Typewriter", 12));
loop.action = {loopSlider.value_((loopNum).unmap(loop.value))};
                         

loopSlider = SCSlider(wS, Rect( 10, 50, 40,160));
loopSlider.value_((loopNum).unmap(15));
loopSlider.setProperty(\background, HiliteGradient(Color.black,Color.new255(60, 60, 0), \h, 128, 0.3););
loopSlider.action = {(loopNum).map(loopSlider.value);
                                loop.value_(((loopNum).map(loopSlider.value)));
                                };
loop.value_(((loopNum).map(loopSlider.value)));

SCStaticText( wS, Rect(10, 232, 40, 20)).string_("loops").align_(\center).setProperty(\font, Font("American Typewriter", 11), \background, HiliteGradient(Color.new255(139, 117, 0),Color.new255(200, 200, 255), \v, 128, 0.3));



repeats = SCNumberBox(wS, Rect(60, 212, 40, 18));
repeats.setProperty(\align,\center);
repeats.setProperty(\background, HiliteGradient(Color.new255(60, 60, 0), Color.white, \v, 128, 0.3););
repeats.setProperty(\font, Font("American Typewriter", 12));
repeats.action = {repeatSlider.value_((repeatNum).unmap(repeats.value))};
                                       

repeatSlider = SCSlider(wS, Rect( 60, 50, 40,160));
repeatSlider.value_((repeatNum).unmap(100));
repeatSlider.setProperty(\background, HiliteGradient(Color.black,Color.new255(60, 60, 0), \h, 128, 0.3););
repeatSlider.action = {(repeatNum).map(repeatSlider.value);
                                repeats.value_(((repeatNum).map(repeatSlider.value)));
                                };
repeats.value_(((repeatNum).map(repeatSlider.value)));

SCStaticText( wS, Rect(60, 232, 40, 20)).string_("repeats").align_(\center).setProperty(\font, Font("American Typewriter", 11), \background, HiliteGradient(Color.new255(139, 117, 0),Color.new255(200, 200, 255), \v, 128, 0.3));



travel = SCNumberBox(wS, Rect(110, 212, 40, 18));
travel.setProperty(\align,\center);
travel.setProperty(\background, HiliteGradient(Color.new255(60, 60, 0), Color.white, \v, 128, 0.3););
travel.setProperty(\font, Font("American Typewriter", 10));
travel.action = {travelSlider.value_((travelNum).unmap(travel.value))};
                                        
travelSlider = SCSlider(wS, Rect( 110, 50, 40,160));
travelSlider.value_((travelNum).unmap(0.0001));
travelSlider.setProperty(\background, HiliteGradient(Color.black,Color.new255(60, 60, 0), \h, 128, 0.3););
travelSlider.action = {(travelNum).map(travelSlider.value);
                                travel.value_(((travelNum).map(travelSlider.value)));
                                };
travel.value_(((travelNum).map(travelSlider.value)));

SCStaticText( wS, Rect(110, 232, 40, 20)).string_("travel").align_(\center).setProperty(\font, Font("American Typewriter", 11), \background, HiliteGradient(Color.new255(139, 117, 0),Color.new255(200, 200, 255), \v, 128, 0.3));

overlapS = SCNumberBox(wS, Rect(160, 212, 40, 18));
overlapS.setProperty(\align,\center);
overlapS.setProperty(\background, HiliteGradient(Color.new255(60, 60, 0), Color.white, \v, 128, 0.3););
overlapS.setProperty(\font, Font("American Typewriter", 12));
overlapS.action = {olSlider.value_((olNum).unmap(overlapS.value))};
                                        
olSlider = SCSlider(wS, Rect( 160, 50, 40,160));
olSlider.value_((olNum).unmap(1.5));
olSlider.setProperty(\background, HiliteGradient(Color.black,Color.new255(60, 60, 0), \h, 128, 0.3););
olSlider.action = {(olNum).map(travelSlider.value);
                                overlapS.value_(((olNum).map(olSlider.value)));
                                };
overlapS.value_(((olNum).map(olSlider.value)));

SCStaticText( wS, Rect(160, 232, 40, 20)).string_("overlap").align_(\center).setProperty(\font, Font("American Typewriter", 11), \background, HiliteGradient(Color.new255(139, 117, 0),Color.new255(200, 200, 255), \v, 128, 0.3));




levS = SCNumberBox(wS, Rect(210, 212, 40, 18));
levS.setProperty(\align,\center);
levS.setProperty(\background, HiliteGradient(Color.new255(60, 60, 0), Color.white, \v, 128, 0.3););
levS.setProperty(\font, Font("American Typewriter", 12));
levS.action = {levSliderS.value_((levNumS).unmap(levS.value));
                                        (levBusS).value = levS.value};

levSliderS = SCSlider(wS, Rect( 210, 50, 40,160));
levSliderS.value_((loopNum).unmap(0.0));
levSliderS.setProperty(\background, HiliteGradient(Color.black,Color.new255(60, 60, 0), \h, 128, 0.3););
levSliderS.action = {(levBusS).value = (levNumS).map(levSliderS.value);
                                levS.value_(((levNumS).map(levSliderS.value)));
                                };
levS.value_(((levNumS).map(levSliderS.value)));

SCStaticText( wS, Rect(210, 232, 40, 20)).string_("level").align_(\center).setProperty(\font, Font("American Typewriter", 11), \background, HiliteGradient(Color.new255(139, 117, 0), Color.new255(200, 200, 255), \v, 128, 0.3));



panRangeSlider=SCRangeSlider(wS, Rect(50, 260, 130, 25));

panRangeSlider.step_(0.05);
panRangeSlider.setProperty(\background, HiliteGradient(Color.new255(60, 60, 0), Color.white, \v, 128, 0.3););
panRangeSlider.lo_(0.45);
panRangeSlider.hi_(0.55);
panRangeSlider.action = { pLo.value_((panRangeSlider.lo.value*2)-1);
						pHi.value_((panRangeSlider.hi.value*2)-1)};

pLo = SCNumberBox(wS, Rect(50, 287, 30, 18));
pLo.setProperty(\align,\center);
pLo.setProperty(\background, HiliteGradient(Color.new255(60, 60, 0), Color.white, \v, 128, 0.3););
pLo.setProperty(\font, Font("American Typewriter", 12));
pLo.value_(-0.1);

SCStaticText( wS, Rect(82, 287, 70, 20)).string_("pan range").align_(\center).setProperty(\font, Font("American Typewriter", 11), \background, HiliteGradient(Color.new255(139, 117, 0),Color.new255(200, 200, 255), \v, 128, 0.3));

pHi = SCNumberBox(wS, Rect(150, 287, 30, 18));
pHi.setProperty(\align,\center);
pHi.setProperty(\background, HiliteGradient(Color.new255(60, 60, 0), Color.white, \v, 128, 0.3););
pHi.setProperty(\font, Font("American Typewriter", 12));
pHi.value_(0.1);

echoBut =	SCButton(wS, Rect(200, 262, 30, 18)).states_([
["off", Color.black, Color.new255(0, 134, 139)],
["on", Color.white, Color.new255(255, 62, 100)]]);
echoBut.setProperty(\font, Font("Trixie-Plain", 11));
SCStaticText( wS, Rect(200, 282, 30, 20)).string_("echo").align_(\center).setProperty(\font, Font("American Typewriter", 12), \background, HiliteGradient(Color.new255(139, 117, 0),Color.new255(200, 200, 255), \v, 128, 0.3));
echoBut.action= {
                if (echoBut.value == 1, {
                     echoStretch.run(true);
                }, {
                   echoStretch.run(false)
                });
        };
        

  	//wR = SCWindow("rate changer", Rect(650, 10 ,175, 60));
	//wR.view.background_(rgb(15,55,95));
	rArray=Array.new(20);
	cR = SCButton(w,Rect(25,23,100,20)).focus;
	cR.setProperty(\font, Font("Trixie-Plain", 14));
	cR.keyDownAction = { arg view,char,modifiers,unicode,keycode;
		//[char,modifiers,unicode,keycode].postln;
		if(unicode == 122, {rArray.add(0.05)};);    //keys z-m
		if(unicode == 120, {rArray.add(0.125)};);
		if(unicode == 99, {rArray.add(0.25)};);
		if(unicode == 118, {rArray.add(0.3)};);
		if(unicode == 98, {rArray.add(0.5)};);
		if(unicode == 110, {rArray.add(0.8)};);
		if(unicode == 109, {rArray.add(1.0)};);
		
		if(unicode == 97, {rArray.remove(0.05)};); //keys a-j
		if(unicode == 115, {rArray.remove(0.125)};);
		if(unicode == 100, {rArray.remove(0.25)};);
		if(unicode == 102, {rArray.remove(0.3)};);
		if(unicode == 103, {rArray.remove(0.5)};);
		if(unicode == 104, {rArray.remove(0.8)};);
		if(unicode == 106, {rArray.remove(1.0)};);
		
		if(unicode == 936, {rArray.add(-0.025)};);  //option key versions
		if(unicode == 8776, {rArray.add(-0.125)};);
		if(unicode == 231, {rArray.add(-0.25)};);
		if(unicode == 8730, {rArray.add(-0.3)};);
		if(unicode == 8747, {rArray.add(-0.6)};);
		if(unicode == 181, {rArray.add(-0.875)};);  //no option-n, m instead
		if(unicode == 8804, {rArray.add(-1.0)};);  // option-,
		
		if(unicode == 229, {rArray.remove(-0.025)};);
		if(unicode == 223, {rArray.remove(-0.125)};);
		if(unicode == 8706, {rArray.remove(-0.25)};);
		if(unicode == 402, {rArray.remove(-0.3)};);
		if(unicode == 169, {rArray.remove(-0.6)};);
		if(unicode == 729, {rArray.remove(-0.875)};);
		if(unicode == 8710, {rArray.remove(-1.0)};);
		
		};
	cR.states = [["rate", Color.black, Color.rand],
		["rate", Color.white, Color.rand]];
			//wR.front; 	
winClose= {w.close; wS.close; CmdPeriod.remove(winClose);};
CmdPeriod.add(winClose);

//midi.. pain in the butt.

MIDIClient.init(4,4);  // i have two iac busses, one rme, and the m-audio
MIDIIn.connect(2, MIDIClient.sources.at(2));
MIDIIn.control = {arg src, chan, num=7, value;

if (chan == 0, 
	{
	(levBus@0).value = (lev1@0).map(value/127);
	{in1LevSlider.value_(value/127).changed;
	inputLevel.value_((lev1@0).map(value/127).round(0.01)).changed}.defer;
	},

{if(chan == 1, 
	{
	(levBus@1).value = (lev1@1).map(value/127);
	{out1LevSlider.value_(value/127).changed;
	granLevel.value_((lev1@1).map(value/127).round(0.01)).changed}.defer;
	},
        
{if(chan == 2, 
	{
	(levBus@2).value = (lev1@2).map(value/127);
	{out2LevSlider.value_(value/127).changed;
	splayLevel.value_((lev1@2).map(value/127).round(0.01)).changed}.defer;
	},
	
{if(chan == 3, 
	{
	(levBus@3).value = (lev1@3).map(value/127);
	{out3LevSlider.value_(value/127).changed;
	chopLevel.value_((lev1@3).map(value/127).round(0.01)).changed}.defer;
	},
{if (chan == 4, 
	{
	(levBus2@0).value = (lev2@0).map(value/127);
	{in1LevSlider2.value_(value/127).changed;
	inputLevel2.value_((lev2@0).map(value/127).round(0.01)).changed}.defer;
	},

{if(chan == 5, 
	{
	(levBus2@1).value = (lev2@1).map(value/127);
	{out1LevSlider2.value_(value/127).changed;
	granLevel2.value_((lev2@1).map(value/127).round(0.01)).changed}.defer;
	},
        
{if(chan == 6, 
	{
	(levBus2@2).value = (lev2@2).map(value/127);
	{out2LevSlider2.value_(value/127).changed;
	splayLevel2.value_((lev2@2).map(value/127).round(0.01)).changed}.defer;
	},
	
{if(chan == 7, 
	{
	(levBus2@3).value = (lev2@3).map(value/127);
	{out3LevSlider2.value_(value/127).changed;
	chopLevel2.value_((lev2@3).map(value/127).round(0.01)).changed}.defer;
	},

{if(chan == 8, 
	{
	(granBus2@0).value = (granLev2@0).map(value/127);
	{pitch2.value_(value/127).changed;
	pit2.value_((granLev2@0).map(value/127).round(0.01)).changed}.defer;},

{if(chan == 9, 
	{	
	(granBus2@1).value = (granLev2@1).map(value/127);
	{pitchDisp2.value_(value/127).changed;
	pD2.value_((granLev2@1).map(value/127).round(0.01)).changed}.defer;},

{if(chan == 10, 
	{	
	(granBus@2).value = (granLev2@2).map(value/127);
	{timeDisp2.value_(value/127).changed;
	tD2.value_((granLev@2).map(value/127).round(0.01)).changed}.defer;
	},			
	
{if (chan == 11, 
	{
	(granBus@0).value = (granLev@0).map(value/127);
	{pitch.value_(value/127).changed;
	pit.value_((granLev@0).map(value/127).round(0.01)).changed}.defer;
	},

{if(chan == 12, 
	{
	(granBus@1).value = (granLev@1).map(value/127);
	{pitchDisp.value_(value/127).changed;
	pD.value_((granLev@1).map(value/127).round(0.01)).changed}.defer;	},
        
{if(chan == 13, 
	{
	(granBus@2).value = (granLev@2).map(value/127);
	{timeDisp.value_(value/127).changed;
	tD.value_((granLev@2).map(value/127).round(0.01)).changed}.defer;
	},
	
{if(chan == 14, 
	{
	(granBus2@3).value = (granLev2@3).map(value/127);
	{overlap2.value_(value/127).changed;
	ol2.value_((granLev2@3).map(value/127).round(0.01)).changed}.defer;
	(granBus@3).value = (granLev@3).map(value/127);
	{overlap.value_(value/127).changed;
	ol.value_((granLev@3).map(value/127).round(0.01)).changed}.defer;	},
	
{if(chan == 15, 
	{
	(granBus2@4).value = (granLev2@4).map(value/127);
	{grainDur2.value_(value/127).changed;
	gD2.value_((granLev2@4).map(value/127).round(0.01)).changed}.defer;
	(granBus@4).value = (granLev@4).map(value/127);
	{grainDur.value_(value/127).changed;
	gD.value_((granLev@4).map(value/127).round(0.01)).changed}.defer;	})
	})
	})
	})
	})
	})
	})
	})
	})
	})
	})
	})
	})
	})
	})
	})
};

)
/*
authors so far:
Jonathan Segel
*/



Link to this Page