-- NOTE::: THIS IS IN STEREO! -- :output "foo"; :samplerate 88200; -- :samplerate 14700; let bpm = 120; wn = 120/bpm; hn = wn/2; qn = hn/2; en = qn/2; sn = en/2; tn = sn/2; Gain g gen = Scale g 0 gen; oldADSREnv = ADSREnv; ADSREnv a d r l len g = Multiply g (Scale 0.5 0.5 (oldADSREnv a d r l len)); QEnv = ADSREnv (qn/100) (qn/15) (qn/4) (2/3); -- QEnv = ADSREnv (qn/100) (qn/15) (qn/4) (1/3); -- QEnv = ADSREnv 0 (qn/10) 0 0; KickEnv = let len = qn; in (\g -> Limit 3 (-3) (Gain 10 (ADSREnv (len/50) (len/10) (len/10) 0 len g))); foldr f z l = if l == [] then z else f (Head l) (foldr f z (Tail l)); map f l = foldr (\a d -> f a : d) [] l; sequence l = if l == [] then [] else let pair = Head l; rest = Tail l; g = Head pair; dur = Tail pair; in Sequence g dur (sequence rest); seq_gen l = foldr (\a d -> Sequence a (Dur a) d) [] l; -- seq_gen l = sequence (map (\gen -> gen : Dur gen) l); rest dur = Sequence Silence dur []; clip dur g = Sequence g dur []; repeat n g = let rep n x = if n == 0 then [] else x : rep (n - 1) x; in seq_gen (rep n g); delay g ga t = g || Gain ga (seq_gen [rest t, g]); ----------------------------------------------------------------------------- -- Drums loadFile fname = (PCMFile 16 1 fname); beat = en; KICK = StereoMixer 1 1 true (clip beat (loadFile "kick.raw")) Silence; SNARE = StereoMixer 1 1 true Silence (clip beat (loadFile "snare.raw")); HIHAT = StereoMixer 1 1 true (clip beat (loadFile "hihat.raw")) Silence; beatrest = StereoMixer 1 1 true (rest beat) (rest beat); drumloop = seq_gen [KICK, HIHAT, SNARE || KICK, HIHAT, beatrest, HIHAT, SNARE || KICK, HIHAT, beatrest, HIHAT, SNARE, HIHAT, KICK, KICK || HIHAT, SNARE, HIHAT]; looplen = Dur drumloop; -- drumloop = clip looplen (delay (delay drumloop 0.5 (beat / 10)) 0.5 (beat / 10)); in repeat 1 (Gain 0.94 drumloop);