;;; ;;; A four-voice rendition of a second-order Markov process. The basic process is taken ;;; from chapter 8 of Computer Music by Dodge/Jerse. ;;; (in-package :cm) (merge stephen-foster () (loop for i from -1 to 2 do ; iterate 4 voices (let ((transp (* i 12))) ; octave offset for each voice (algorithm nil midi-note (length 90 amplitude .5) (setf note (item (markov (b3 d4 -> d4) (cs4 d4 -> (d4 .3125) (e4 .3125) (a4 .3125)) (d4 d4 -> (cs4 .125) (d4 .125) (e4 .5625) (fs4 .125) (a4 .0625)) (e4 d4 -> (b3 .0625) (d4 .0625) (e4 .25) (fs4 .3125) (a4 .0625) (cs5 .0625) (d5 .1875)) (fs4 d4 -> (e4 .75) (fs4 .1875) (g4 .0625)) (a4 d4 -> (e4 .6875) (fs4 .3125)) (b4 d4 -> d4) (d4 b3 -> d4) (d4 cs4 -> d4) (e4 cs4 -> d4) (d4 e4 -> (d4 .1875) (e4 .25) (fs4 .5) (a4 .0625)) (e4 e4 -> (cs4 .0625) (d4 .75) (e4 .0625) (fs4 .125)) (fs4 e4 -> (cs4 .125) (d4 .4375) (e4 .1875) (fs4 .125) (a4 .0625) (d5 .0625)) (d4 fs4 -> (e4 .4375) (fs4 .1875) (g4 .125) (a4 .25)) (e4 fs4 -> (d4 .0625) (e4 .1875) (fs4 .3125) (g4 .25) (a4 .0625) (b4 .0625)) (fs4 fs4 -> (d4 .1875) (e4 .25) (fs4 .3125) (g4 .125) (a4 .0625)) (g4 fs4 -> (e4 .5) (g4 .5)) (a4 fs4 -> (d4 .3125) (e4 .25) (fs4 .1875) (g4 .0625) (a4 .125) (b4 .0625)) (b4 fs4 -> (e4 .6875) (fs4 .3125)) (d4 g4 -> (fs4 .6875) (b4 .3125)) (fs4 g4 -> (fs4 .25) (g4 .1875) (a4 .3125) (b4 .1875)) (g4 g4 -> (g4 .5) (a4 .5)) (a4 g4 -> fs4) (b4 g4 -> b4) (a4 gs4 -> a4) (d4 a4 -> (fs4 .25) (a4 .75)) (e4 a4 -> (a4 .8125) (b4 .1875)) (fs4 a4 -> (fs4 .125) (a4 .625) (b4 .1875) (d5 .0625)) (g4 a4 -> (d4 .125) (a4 .625) (d5 .25)) (gs4 a4 -> a4) (a4 a4 -> (fs4 .25) (g4 .0625) (gs4 .0625) (a4 .3125) (b4 .3125)) (b4 a4 -> (d4 .0625) (fs4 .5625) (g4 .0625) (a4 .125) (b4 .0625) (d5 .125)) (d5 a4 -> (fs4 .875) (a4 .125)) (e5 a4 -> a4) (fs4 b4 -> a4) (g4 b4 -> a4) (a4 b4 -> (d4 .0625) (fs4 .0625) (a4 .75) (b4 .0625) (b4 .0625)) (b4 b4 -> (fs4 .125) (a4 .75) (d5 .125)) (cs5 b4 -> a4) (d5 b4 -> (g4 .0625) (a4 .3125) (b4 .3125) (d5 .25)) (d4 cs5 -> d5) (d5 cs5 -> (b4 .75) (d5 .25)) (e5 cs5 -> d5) (d4 d5 -> (a4 .125) (b4 .6875) (cs5 .1875) ) (e4 d5 -> cs5) (a4 d5 -> (a4 .3125) (b4 .3125) (cs5 .1875) (d5 .125)) (b4 d5 -> (a4 .5625) (b4 .125) (cs5 .3125)) (cs5 d5 -> (b4 .3125) (e5 .625)) (d5 d5 -> b4) (d5 e5 -> (a4 .3125) (cs5 .6875))))) ;; transpose each algo to its own octave (setf note (transpose note transp)) (setf rhythm (item (items ((rhythms h h tempo 200) weight .125) ((rhythms h h tempo 200) weight .25) ((rhythms q for 4 tempo 200) weight .125) ((rhythms h q q tempo 200) weight .125) ((rhythms q q h tempo 200) weight .125) ((rhythms q h q tempo 200) weight .125) ((rhythms q h q tempo 200) weight .125) ((rhythms w tempo 200) weight .125) in random)))))))