(defun strum (src skip dur cue gain pan wet pitches) (when (atom pitches) (setf pitches (list pitches))) (mix (loop for pitch in pitches collect (clip :src src :skip skip :dur dur :cue cue :gain gain :mono yes ; for effective panning (comb :pitch pitch :reverb 0.5 :wet wet) ;0.5 play with reverb :pan pan ) ) ) ) (defun banjo-mix (&key parts (tempo 60) (time-jitter 0.0) (pan-pattern '(0 1)) &aux kyew param-sets interval left counter src skip dur pan) (setf param-sets (tag (apply #'collate parts))) (setf kyew 0) (setf counter 0) (setf left t) (when (numberp tempo) (setf tempo (list 0 tempo))) (print tempo) (print (list 'time-jitter time-jitter)) (mix (loop for params in param-sets do (pull-keys (list :snd-class :rthm :gain :wet :pitch (list :cue kyew)) params) do (print (list 'cue cue)) do (setf snd-class (loop for c in snd-class collect (list c 1))) do (setf interval (pick-from snd-class)) do (cond ((> wet threshold) (setf src "/home/jsa/coal/pick.snd") (setf skip 7.988) (setf dur 1.166) ;(setf pan 0.5) ) (t (setf src pickaxe) (setf skip (first interval)) (setf dur (second interval)) ) ) do (setf pan (nth (mod counter (length pan-pattern)) pan-pattern)) ; (defun strum (src skip dur cue gain pan wet pitches) collect (strum src skip dur (beat-to-sec (max (+ cue (- (* time-jitter (random 1.0)) (/ time-jitter 0.5))) 0.0) tempo) gain pan wet pitch) do (when (numberp rthm) (setf kyew (+ kyew rthm))) do (setf left (not left)) ;toggles 'left' between t and nil do (setf counter (1+ counter)) ) )) (setf break-1 0.16) ;16 (setf break-2 0.27) ;.25 (setf break-3 0.72) ;.75 (setf break-4 0.8) ;.8 (setf threshold 0.2) (setf notes 108) (defun wet-graph (beats) (graph 0 0 (* 0.22 beats) threshold (* break-2 beats) 0.75 (* break-3 beats) 0.75 (* break-4 beats) threshold (* 0.88 beats) 0 beats 0)) (defun ax-ban-ax () (play (banjo-mix :parts (list (sequence :snd-class (class-seq notes :eval t)) (sequence :rthm (truncate (/ notes 4)) p1) (sequence :gain notes 1) (sequence :wet (wet-graph notes)) (sequence :pitch 10 'g3 'd3 2 'g3 'd3 'g3 'b3 'a3 'b3 'g3 'd3 'g3 'a3 'g3 'f#3 'g3 'a3 'd3 'g3 'b3 'd4 'g3 'b3 'a3 'b3 'd4 'g4 2 'd4 'g4 'f#4 'e4 'd4 'a3 2 'g3 'b3 'g3 2 '((c4 e3)) 'e4 'c4 'g3 'd3 '((b3 d3 )) 'a3 'g3 'b3 'g3 2 'd3 2 '((f#3 a3)) 'd3 'g3 'b3 'd4 'b3 'g3 'd4 'b3 'g3 'a3 'f#3 2 'd3 'g3 'b3 2 '((d4 b3)) 'g4 'd4 'b3 'a3 'g3 'd3 'b3 'a3 3 'g3 'd3 'g3 'd3 'b3 'a3 'g3 'd3 11 'g3) ) :tempo (make-tempo-curve 0 50 (* notes break-1) 68 (* notes break-2) 210 ;200 (* notes break-3) 200 ;200 (* notes break-4) 70 ;70 notes 50 ;55 ) :pan-pattern '(0 1)) :rate 44100.00 ;:ctlrate 2000 :device audio :write "test.snd" :script-to "/home/jsa/coal/ax-ban-axz.hack" ;remember use suffix .hack )) (ax-ban-ax)