BLOGGER TEMPLATES AND TWITTER BACKGROUNDS

Thursday, 4 March 2010

SwingOSC.default.boot;
(
var
// GUI elements
w, slider1, slider2, slider3,
kickcs, cymbalcs, hatscs, snarecs, melodycs, bubblecs,
makewindow,
// Timing elements
bps, clock, bar, beat,
//Drum patterns
kickpattern, snarepattern, hatspattern, cypattern,
kickp, snp, hhp, cyp, hatsdecay,

//Melody patterns
wholepattern, bassline, baseline, mela, melb, melc, meld, mele, melody,
//colors
rainbow,highpink,sunset,amethyst,emerald,skyfi,
//synths
bfcs, bassfreq;

bps = 6;
clock= TempoClock(bps);
bar= 4/bps;
beat= bar/4;

//drumSynths
SynthDef(\kick,
    {arg vol= 1, decay= 1, pitch= 1, filter= 1, on=0;
    var sin, pw, kik, kikfilter, volon;
    volon= vol*on;
    sin= LFTri.ar(freq: Line.kr(40,20,0.1*decay,doneAction:2)*pitch+2,
            add: 0, mul: 0.3*volon);
    pw= Pulse.ar(freq: 40, add: 0,
               mul: EnvGen.ar(Env.perc(0,0.07,0.3*volon)));
    kik= Mix.new([sin,pw]);
    kikfilter= LPF.ar(in: kik, freq: XLine.kr(200,30,0.1*decay)*filter);
    Out.ar(0, Pan2.ar(kikfilter, 0))}).store;

SynthDef(\snare,
    {arg vol= 1, on= 0, decay= 1, pitch= 1, filter= 1, filter2= 1;
    var noise, filtap, volon, tri, snare, snaref, snaref2;
    volon= vol*on;
    filtap= EnvGen.ar(Env.perc(0,0.2*decay,0.2*volon,1));
    noise= WhiteNoise.ar(mul: filtap, add: Line.kr(-3.5,2,1));
    tri= Pulse.ar(freq: Line.kr(60*pitch,228,0.3,doneAction:2),
               mul: Line.kr(0.1,0.00,0.1)*volon);
    snare= noise+tri;
    snaref= HPF.ar(in: snare, freq: Line.kr(800,200,0.22)*filter);
    snaref2= LPF.ar(in: snaref, freq: Line.kr(600,1000,0.81)*filter2);
Out.ar(0, Pan2.ar(snaref*on, 0))}).store;

SynthDef(\hats,
    {arg vol= 1, decay= 1, on=0, pitch=1;
    var noise, filter, envel, menv,onvol;
    onvol= -1*on*vol;
    menv= EnvGen.ar(Env.perc(0.3,0.01,1,4));
    noise= PinkNoise.ar(mul: menv*onvol*7, add: Line.kr(1*pitch,0,0.03*decay,doneAction:2));
    envel= EnvGen.ar(Env.adsr(0.00001,0.2*decay,0.7,0.2,2900));
    filter= HPF.ar(in: noise, freq: envel);
Out.ar([0,1], Mix.ar(filter))}).store;

SynthDef(\cymbal,
    {arg vol= 0.5, decay= 1, pitch= 1, on= 0;
    var sq1, sq2, volon;
    volon= vol*on;
    sq1= Pulse.ar(freq: Line.kr(623*pitch,223,0.2*decay,doneAction:2)*pitch,
            mul: 0.3*volon);
    sq2= Pulse.ar(add: 0,
    freq:EnvGen.ar(Env.triangle(0.8*decay,300)),
        mul: 0.3*volon);
Out.ar([0,1], Mix.ar(sq1*sq2))}).store;

//synthSynths
SynthDef(\lead,
    { arg note=60, amp=4, clock=bps, filfreq=2, length=1, pan=7;
    var freq, sin, saw, sinsaw, panner, filterenv, beat, sinres;
    freq= note.midicps*2;
    beat= bps;
    sin= SinOsc.ar
        (freq: Line.kr(freq-3,freq,beat,doneAction:2),
         mul: Line.kr(0.2,0.01,beat+1));
    saw= LFTri.ar
        (freq: Line.kr(freq-1,freq,beat,doneAction:2),
         mul: Line.kr(0.2,0.01,beat+1));
    filterenv= LPF.ar(in: saw, freq: filfreq*1000+70);
    sinres= Resonz.ar(in: sin, freq: SinOsc.ar(freq: 0.3, mul: 0.6,add:700));
    panner = Pulse.ar(freq: (pan*3), mul:0.5);
Out.ar(0, Pan2.ar(in:filterenv+sinres, pos:panner))
    }).store;

SynthDef(\bass,
    { arg note=44, bubble=0, bubblelength=3;
    var env2, freq, pulse, tri, beat,env,filter, out1, sin;
    freq= note.midicps;
    beat= (4/18);
    pulse= Pulse.ar(freq: freq, mul:0.4);
    tri= LFTri.ar(freq: freq, mul: 0.3);
    sin= bubble*SinOsc.ar(freq: Line.kr(freq*16,freq*2, beat*bubblelength), mul:0.3);
    env= Line.kr(0,1,beat,doneAction:2);
    env2= EnvGen.ar(Env.triangle(1,beat));
    out1= MoogFF.ar(in:tri+pulse, freq: 1900*env);
Out.ar(0, Pan2.ar(in:out1+sin, pos:0)) } ).store;


SynthDef(\am,
    { arg am= 1, arp=0, bubble=0;
    var freq, ampmod, sin, sin2, arparray, bubbles, pan;
    freq= 622;
    ampmod= SinOsc.ar(freq:Line.kr(4,1,4,doneAction:2), mul:0.1);
    sin= Pulse.ar(freq: 622, mul: 0.3*ampmod);
    sin2= LFTri.ar(freq: Line.kr(1245,311,4), mul:0.04);
    bubbles= Resonz.ar(in:sin, freq:Line.kr(9100,00,4));
    pan= SinOsc.ar(freq: 4);
Out.ar([0], (Pan2.ar(in: bubbles, pos: pan)+Pan2.ar(in: sin2, pos: -1*pan))) } ).store;


rainbow = {
highpink= Color.new255(2554194);
sunset= Color.new255(255,94,41);
amethyst= Color.new255(195,15,255);
emerald= Color.new255(41,255,94);
skyfi= Color.new255(102,255,217);
 };
rainbow;

w= JSCWindow("- 0 - 0 - 0 - 0 -", Rect(100,100,510,230));
w.view.decorator= FlowLayout(w.view.bounds, 10@10, 20@20);
//w.view.background= Color.rand;

//Buttons
a= JSCButton(w,Rect(20,20,150,30));
a.states= [ ["drumsON", emerald], ["OFF", highpink]];
b= Ppar([kickp,hhp,snp,cyp]).play(clock, quant:1);
a.action= { | state |
    if(state.value == 0, {b.stop});
    if(state.value == 1, {b= Ppar([kickp,hhp,snp,cyp]).play(clock, quant:1);
})};
c= JSCButton(w,Rect(20,20,150,30));
c.states= [ ["leadON"], ["OFF"] ];
d= Ppar([melody]).play(clock, quant:12);
c.action= { | state |
    if(state.value == 0, { d.stop } );
    if(state.value == 1, { d= Ppar([melody]).play(clock, quant:12) } ) };


e= JSCButton(w,Rect(20,20,150,30));
e.states= [ ["bassON"], ["OFF"] ];
f= baseline.play(clock, quant:12);
e.action= { | state |
    if(state.value == 0, { f.stop } );
    if(state.value == 1, { f= baseline.play(clock, quant:12) } ) };


w.front;
w.onClose= {b.stop; d.stop; e.stop};

//Sliders
slider1= Slider2D(w,Rect(8,9,150,150));
slider2= Slider2D(w,Rect(8,9,150,150));
slider3= Slider2D(w,Rect(8,9,150,150));

kickcs= ControlSpec(1,9,'linear',1,1);
snarecs= ControlSpec(1,4,'linear',1,1);
hatscs= ControlSpec(1,10,'linear',1,1);
cymbalcs= ControlSpec(1,5,'linear',1,1);
melodycs= ControlSpec(1,7,'linear',1,2);
bubblecs= ControlSpec(-4,7,'linear',1,2);

//Drum patterns
kickpattern=  Pseq([1,0,0,0, 0,0,0,0, 0,0,1,0, 0,0,0,0,
            1,0,0,0, 0,0,0,0, 0,0,1,1, 0,0,0,0,
            1,0,0,0, 0,0,0,0, 0,0,1,0, 0,0,0,0,],inf);
hatspattern=  Pseq([1,1,1,1, 1,0,1,1, 1,1,1,1, 1,1,1,1, 1,1,1,1],inf);
snarepattern= Pseq([0,0,0,0, 1,0,0,0, 0,0,0,0, 1,0,0,0],inf);
cypattern=    Pseq([0,0,0,0, 0,0,0,0, 0,0,1,0, 0,0,0,0, 0,0,1,0],inf);
hatsdecay=    Pseq([1,1,3,1, 1,2,3,1, 1,3,1,1, 1,2,1,1],inf);


kickp=   Pbind(  \on,Pseq([kickpattern],inf),
            \instrument, \kick,
            \vol,1,\decay,4,\filter,115,
            \pitch,Pfunc({kickcs.map(slider1.x).postln}));
hhp=     Pbind(    \on,Pseq([hatspattern],inf),
        \instrument, \hats,
        \decay,Pseq([hatsdecay],inf),
        \vol,Pfunc({hatscs.map(slider2.x).postln}));
snp=     Pbind( \on,Pseq([snarepattern],inf),
        \instrument, \snare,
        \vol,1,\decay,Pfunc({snarecs.map(slider2.y).postln}),\pitch,5);
cyp=    Pbind( \on,Pseq([cypattern],inf),
        \instrument, \cymbal,
        \vol,1,\decay,1.5,\pitch,Pfunc({cymbalcs.map(slider1.y).postln}));


mela=   Pseq([44,58,46,44,44,72,44,51],2);
melb=   Pseq([56,60,46,44,42,72,46,51],4);
meld=   Pseq([44,58,70,44,42,75,44,51],1);
mele=   Pseq([44,58,46,44,44,87,42,51],1);
melc=   Pseq([56,58,46,44,40,68,44,51],4);

melody= Pbind( \instrument, \lead,
            \note, Pseq([melb,mela,meld,mele,melc],inf),
            \length, Prand([0.5,0.66,0.75,1],inf),
            \filfreq,Pfunc({melodycs.map(slider3.x).postln}));


bassline= Pseq( [56,44,56,44,56,44,56,44] ++ 44.dup(4) ++
        [44,44] ++ [44,44] ++ [56,40,56,40,56,40,56,40]);

baseline= Pbind(  \instrument, \bass,
            \note, Pseq([bassline],inf),
            \stretch,4);
)