// 60Hz Gabber Rave 1995 
( 
SynthDef ( \gabberkick ,  { 
    var  snd ,  freq ,  high ,  lfo ; 
    freq  =  \freq . kr ( 440 )  *  ( Env . perc ( 0.001 ,  0.08 ,  curve:  -1 ). ar  *  48  *  \bend . kr ( 1 )). midiratio ; 
    snd  =  Saw . ar ( freq ); 
    snd  =  ( snd  *  100 ). tanh  +  (( snd . sign  -  snd )  *  -8 . dbamp ); 
    high  =  HPF . ar ( snd ,  300 ); 
    lfo  =  SinOsc . ar ( 8 ,  [ 0 ,  0.5pi ]). range ( 0 ,  0.01 ); 
    high  =  high . dup ( 2 )  +  ( DelayC . ar ( high ,  0.01 ,  lfo )  *  -2 . dbamp ); 
    snd  =  LPF . ar ( snd ,  100 ). dup ( 2 )  +  high ; 
    snd  =  RLPF . ar ( snd ,  7000 ,  2 ); 
    snd  =  BPeakEQ . ar ( snd ,  \ffreq . kr ( 3000 )  *  XLine . kr ( 1 ,  0.8 ,  0.3 ),  0.5 ,  15 ); 
    snd  =  snd  *  Env . asr ( 0.001 ,  1 ,  0.05 ). ar ( 2 ,  \gate . kr ( 1 )); 
    Out . ar ( \out . kr ( 0 ),  snd  *  \amp . kr ( 0.1 )); 
}). add ; 
SynthDef ( \hoover ,  { 
    var  snd ,  freq ,  bw ,  delay ,  decay ; 
    freq  =  \freq . kr ( 440 ); 
    freq  =  freq  *  Env ([ -5 ,  6 ,  0 ],  [ 0.1 ,  1.7 ],  [ \lin ,  -4 ]). kr . midiratio ; 
    bw  =  1.035 ; 
    snd  =  {  DelayN . ar ( Saw . ar ( freq  *  ExpRand ( bw ,  1  /  bw ))  +  Saw . ar ( freq  *  0.5  *  ExpRand ( bw ,  1  /  bw )),  0.01 ,  Rand ( 0 ,  0.01 ))  }. dup ( 20 ); 
    snd  =  ( Splay . ar ( snd )  *  3 ). atan ; 
    snd  =  snd  *  Env . asr ( 0.01 ,  1.0 ,  1.0 ). kr ( 0 ,  \gate . kr ( 1 )); 
    snd  =  FreeVerb2 . ar ( snd [ 0 ],  snd [ 1 ],  0.3 ,  0.9 ); 
    snd  =  snd  *  Env . asr ( 0 ,  1.0 ,  4 ,  6 ). kr ( 2 ,  \gate . kr ( 1 )); 
    Out . ar ( \out . kr ( 0 ),  snd  *  \amp . kr ( 0.1 )); 
}). add ; 
) 
( 
var  durations ; 
durations  =  [ 1 ,  1 ,  1 ,  1 ,  3 / 4 ,  1 / 4 ,  1 / 2 ,  3 / 4 ,  1 / 4 ,  1 / 2 ]; 
Ppar ([ 
    Pbind ( * [ 
        instrument:  \gabberkick , 
        amp:  -23 . dbamp , 
        freq:  60 , 
        legato:  0.8 , 
        ffreq:  Pseq (( 0 ..( durations . size  *  4  -  1 )). normalize ,  inf ). linexp ( 0 ,  1 ,  100 ,  4000 ), 
        dur:  Pseq ( durations ,  inf ), 
        bend:  Pfuncn ({  | x |  if ( x  <  ( 1 / 2 ),  0.4 ,  1 )  },  inf )  <>  Pkey ( \dur ), 
    ]), 
    Pbind ( * [ 
        instrument:  \hoover , 
        amp:  -20 . dbamp , 
        midinote:  74 , 
        dur:  durations . sum  *  2 , 
        sustain:  7 , 
    ]) 
]). play ( TempoClock ( 210  /  60 )); 
)