Eternal Sunshine
(
  // INIT take time
  ~t = 185/4/60; TempoClock.default.tempo = ~t; // now with tempo !
  33.do { arg x;
    ( "creating babass "++x ).postln;
    SynthDef(( \babass++x ).asSymbol, { arg out=0, amp=0.1, gate=1, pan=0, freq=200;
      var sig;
      var voices = 8; // CPU control
      sig = SinOsc.ar(freq);
      sig = voices.collect({
        [SinOsc, LFSaw, LFCub, LFPulse].choose.ar(freq * [1,2,1 + rrand(0,0.01)].choose * ( 1 + ( SinOsc.ar(exprand(4,100) * ( 1 + ( SinOsc.ar(exprand(0.1,100)) * 1 ))) * rrand(0,1) )), rrand(0.0,pi))
      });
      sig = sig.collect({ arg sig;
        sig + [SinOsc, LFSaw, LFCub, LFPulse].choose.ar(freq * [1,2,1 + rrand(0,0.01)].choose * ( 1 + ( SinOsc.ar(exprand(4,100) * ( 1 + ( SinOsc.ar(exprand(0.1,100)) * 1 ))) * rrand(0,1) )), rrand(0.0,pi));
      });
      sig = ( sig*\distamp.kr(10) * (1..voices)/4 ).tanh * \distpostamp.kr(1/2);
      sig = sig.collect({ arg sig;
        var line = [
          XLine.kr(0.1,2,exprand(0.02,4)),
          XLine.kr(2,0.1,exprand(0.02,4)),
        ];
        RLPF.ar(sig, rrand(100,1000) * line.choose, rrand(0.1,0.5) * line.choose);
      });
      sig = HPF.ar(sig, 50);
      sig = LPF.ar(sig, 2500);
      sig = sig * EnvGen.ar(Env.adsr(0.01,0.1,0.8,0.1),gate,doneAction:2);
      pan = pan + SinOsc.kr((1..voices)/21, mul:0.01);
      sig = sig * 2;
      sig = sig * \modamp.kr(1).lag(0.1);
      sig = DelayC.ar(sig, 0.01,0.001) + sig;
      sig = Pan2.ar(sig, pan, amp).mean;
      Out.ar(out, sig);
    }).add;
  };
SynthDef(\kobass, { arg out=0, amp=0.1, gate=1, pan=0, freq=200;
  var sig;
  freq = freq.lag(\freqlag.kr(0.4));
  sig = LFSaw.ar(freq * [1/2,1,2] *.t [1,1.00001], 0.7);
  sig = RLPF.ar(sig, \lpfratio.kr(1.7)* freq * SinOsc.kr(1/18 * (1..8)).range(0.5,2), \rq.kr(0.5));
  sig = sig * EnvGen.ar(Env.adsr(0.01,0.01,0.8,0.1,1,-4),gate,doneAction:2);
  sig = sig * SelectX.kr(\ammix.kr(1),[1,SinOsc.ar(\amf.kr(1*~t)).unipolar]);
  sig = SelectX.ar(LFNoise1.kr(1/62.1).unipolar, [sig, sig.fold( LFNoise1.kr(1/53).range(0.5,2) )]);
  sig = sig.mean;
  sig = sig * AmpComp.kr(freq);
  sig = sig * 3;
  sig = sig * amp;
  sig = sig * \modamp.kr(1).lag(0.1);
  Out.ar(out, sig);
}).add;
);
(
  // PLAY!
  Pdef(\chord1, Pmono(\kobass,
    \degree, Pseq([
      [0,4],
      [0,5],
    ],inf),
    \lpfratio, 1,
    \amf, Ptuple(Prand(2**(0..5),inf)/4!2).stutter(Prand([2,3,4,6,8],inf))*~t,
    \ammix, Ptuple(Prand(( 0..10 ),inf)/10!2).stutter(Prand([2,3,4,6,8],inf)),
    \octave, Ptuple(Prand([4,3,5,6],inf).stutter(Prand([Prand([2,3,4,6,8]),4,6,8],inf))!2),
    \dur, 4,
    \modamp, Pseq([
      Pn(1,32*3),
      Pn(0,32*1),
    ],inf),
    \amp, 0.1/2 * 0.5,
  ));
  Pdef(\chord2, Pmono(\kobass,
    \degree, Pseq([
      9, 9, 8, 8,
    ],inf)+Pseq([0,1,0,3],inf).stutter(Prand([8,8,8,4,2],inf).stutter(4)),
    \lpfratio, 1,
    \amf, Ptuple(Prand(2**(0..5),inf)/4!2).stutter(3)*~t,
    \ammix, Ptuple(Prand(( 0..10 ),inf)/10!2).stutter(2),
    \modamp, Prand([1,0,0,0],inf).stutter(Prand([8,16,32],inf)),
    \octave, Ptuple(Prand([4,3,5,6],inf).stutter(Prand([Prand([2,3,4,6,8]),4,6,8],inf))!2),
    \dur, 4,
    \amp, 0.1/2 * 0.5,
  ));
  Pdef(\far,
    Plazy({
      Ppar([
        Plazy({
          Pfindur([64,32].choose, Ppar([
            rrand(1,8).collect({ arg idx;
              PmonoArtic(( \babass++rrand(0,32) ).asSymbol,
              \degree, Pstep(Pseq([
                9, 9, 8, 8,
              ],inf),4)+Pseq([0,1,0,3],inf),
              \modamp, Pseq([
                Pseq([
                  Pseq({[
                    1,0,
                    0,1,
                    1,1,
                    0,0,
                  ].clump(2).choose}.dup([2,4,8,16].choose).flat,[2,4,8,16].choose).dup([2,4,8,16].choose)
                ].flat,1) * Pstep(Pseq([[1,0].choose],inf),[1,3].choose)
              ],inf),
              \legato, Pseq([{ [rrand(0.1,0.8),1].choose }!( 2**rrand(0,3) )].flat,inf),
              \lpfratio, 1,
              \octave, [3,4,5,6].choose,
              \dur, [[1/4,1/16].choose,1/8,1/4,1/2,1,2].choose,
              \amp, 0.1 * [0.8,0.5,Pseq([0.8,0.5],inf)].choose * 0.5,
            )
          }),
        ].flat))
      }).loop,
      Plazy({
        Pfindur([64,32,16,8].choose, Ppar([
          rrand(1,8).collect({ arg idx;
            PmonoArtic(( \babass++rrand(0,32) ).asSymbol,
            \degree, Pstep(Pseq([
              9, 9, 8, 8,
            ],inf),4)+Pseq([0,1,0,3],inf),
            \modamp, Pseq([
              Pseq([
                Pseq({[
                  1,0,
                  0,1,
                  1,1,
                  0,0,
                ].clump(2).choose}.dup([2,4,8,16].choose).flat,[2,4,8,16].choose).dup([2,4,8,16].choose)
              ].flat,1) * Pstep(Pseq([1,0],inf),Pseq([1,3].scramble,inf) * [1,2,4,8,16].choose)
            ],inf),
            \legato, Pseq([{ [rrand(0.1,0.8),1].choose }!( 2**rrand(0,3) )].flat,inf),
            \lpfratio, 1,
            \octave, [3,4,5,6].choose,
            \dur, [1/2,1/4,1/8,1/4,1/2,1,2].choose,
            \amp, 0.1 * [0.8,0.5,Pseq([0.8,0.5],inf)].choose * 0.5,
          )
        }),
      ].flat));
    }).loop,
  ],inf);
})
);
Pdef(\main, Ptpar([
  0,Pdef(\chord1),
  16,Pdef(\far),
  64,Pdef(\chord2),
])).play;
)