-- :output "foo"; :samplerate 44100; -- :samplerate 14700; let bpm = 140; wn = 240/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); ----------------------------------------------------------------------------- -- Drums myPCM fname = (PCMFile 8 3 fname); kickd = en; -- Dur KICK; KICK = (clip kickd (myPCM "kick.pcm")); SNARE = clip (2 * kickd) (myPCM "snare.pcm"); HIHAT = repeat 2 (clip (kickd / 2) (myPCM "hihat.pcm")); kickr = rest kickd; longkick = Sequence KICK kickd kickr; hsnare = clip kickd SNARE; hkick = clip (kickd/2) KICK; qsnare = clip (kickd/2) SNARE; beat5 = seq_gen [hkick, qsnare, hkick, qsnare, hkick, rest (kickd/2)]; drumloop = repeat 16 HIHAT || seq_gen [longkick, hsnare, beat5, kickr, SNARE, KICK, hsnare, beat5, kickr, kickr]; -- drumloop = clip (Dur drumloop) (drumloop || (Delay (tn/4) drumloop)); drumloop = Gain 1.6 drumloop; ----------------------------------------------------------------------------- -- Bass N env f = env (Mixer 1 1 true (SawtoothDCO f) (TriangleDCO (f/2))); -- N env f = env (SquareDCO 0.1 f); qN = N (QEnv qn); eN = N (QEnv en); bassline = seq_gen [ qN b1, qN b1, eN b1, eN a1, eN b1, eN d2, qN b1, eN b1, eN e1, eN f1, eN f#1, eN a1, eN a#1 ]; -- bassline = bassline || repeat 8 (KickEnv (TriangleDCO e0)); -- bassline = Gain 2 (CapacitorFilter 0.001 0.005 bassline); -- bassline = repeat 2 bassline; -- bassline = Multiply (Joystick 0 (-1)) bassline; ----------------------------------------------------------------------------- in repeat 16 (Gain 0.37 (drumloop || bassline));