;; Market Song ;; Jen Carlile ;; Music 220B, Homework 1 ;; All of the 'players' in my percussion ensemble are actually snippets taken ;; from a field recording I made while living in the Netherlands. Every ;; saturday I would wake up and ride my bicycle to the open-air market in ;; downtown Rotterdam. I never really needed to buy anything, maybe some ;; vegetables for dinner or a plant to spruce up my kitchen, but I loved ;; walking up and down the bustling aisles, listening to the sing-song voices ;; of the butcher, the vegetable seller, the baker, floating above the crowd ;; as they (very vocally) made the shoppers aware of their weekly specials. (load "cut.cmucl") (defparameter cut-vib-osc-amp 0) (defparameter cut-vib-noi-amp 0) (setf *clm-locsig-type* mus-interp-sinusoidal) ;; position lists (setf fast360 (new cycle :of '(45 135 225 315))) (setf mid360 (new cycle :of '(0 45 90 135 180 225 270 325 360))) (setf ltor (new cycle :of '(325 347.5 0 22.5 45 67.5 90 112.5))) (setf rtol (new cycle :of '(157.5 135 112.5 90 67.5 45 22.5 0))) (setf revmid360 (new cycle :of '(360 325 270 225 180 135 90 45 0))) ;;useful ;(loop repeat 10 collect (random 360)) ;(random 360) ;; amplitude lists (setf a (new random :of '(mp mf mf f))) (setf a2 (new heap :of '(pp mp mp mf mf mf mf f f f ff ff))) (setf asoft (new palindrome :of '(ppp pp pp p p p))) (setf afade (new cycle :of '(f f mf mf mp mp p pp pp))) (setf afadesoft (new cycle :of '(mp mp p p pp pp ppp ppp))) (setf afadevsoft (new cycle :of '(p p p pp pp pp ppp ppp ppp))) ;; note / rhythm lists (setf r (new heap :of '(q. q. q q q q e e e e. e.))) (setf rp (new heap :of '(e e e. e. s s s s. s.))) ;; sample-rate conversion lists (setf rt (new random :of '(0.9 1.1 0.5 2.0 1.3 0.7 1 1 1 1 1 1 1 1))) ;; 'instrument' definitions ;; ;; percussive word ends (defun perc (time amp rate &key (degree 45)(distance 1)) (one-cut time amp :soundfile "/user/j/jcarlile/220b/hw1/sounds/perc.wav" :amp-func '(0 1 1 1) :sample-rate-mult rate :degree degree :distance distance)) (defun perc2 (time amp rate &key (degree 45)(distance 1)) (one-cut time amp :soundfile "/user/j/jcarlile/220b/hw1/sounds/perc2.wav" :amp-func '(0 1 1 1) :sample-rate-mult rate :degree degree :distance distance)) (defun perc3 (time amp rate &key (degree 45)(distance 1)) (one-cut time amp :soundfile "/user/j/jcarlile/220b/hw1/sounds/perc3.wav" :amp-func '(0 1 1 1) :sample-rate-mult rate :degree degree :distance distance)) (defun perc4 (time amp rate &key (degree 45)(distance 1)) (one-cut time amp :soundfile "/user/j/jcarlile/220b/hw1/sounds/perc4.wav" :amp-func '(0 1 1 1) :sample-rate-mult rate :degree degree :distance distance)) ;; short words / phrases (defun ananas (time amp rate &key (degree 45)(distance 1)) (let* ((cut-vib-osc-amp 0.0)(cut-vib-noi-amp 0.0)) (one-cut time amp :soundfile "/user/j/jcarlile/220b/hw1/sounds/ananas.wav" :amp-func '(0 1 1 1) :sample-rate-mult rate :degree degree :distance distance))) (defun ein (time amp rate &key (degree 45)(distance 1)) (one-cut time amp :soundfile "/user/j/jcarlile/220b/hw1/sounds/ein.wav" :amp-func '(0 1 1 1) :sample-rate-mult rate :degree degree :distance distance)) (defun eineuro (time amp rate &key (degree 45)(distance 1)) (one-cut time amp :soundfile "/user/j/jcarlile/220b/hw1/sounds/eineuro.wav" :amp-func '(0 1 1 1) :sample-rate-mult rate :degree degree :distance distance)) (defun eineuro2 (time amp rate &key (degree 45)(distance 1)) (one-cut time amp :soundfile "/user/j/jcarlile/220b/hw1/sounds/eineuro2.wav" :amp-func '(0 1 1 1) :sample-rate-mult rate :degree degree :distance distance)) (defun eineuro3 (time amp rate &key (degree 45)(distance 1)) (one-cut time amp :soundfile "/user/j/jcarlile/220b/hw1/sounds/eineuro3.wav" :amp-func '(0 1 1 1) :sample-rate-mult rate :degree degree :distance distance)) (defun euro (time amp rate &key (degree 45)(distance 1)) (one-cut time amp :soundfile "/user/j/jcarlile/220b/hw1/sounds/euro.wav" :amp-func '(0 1 1 1) :sample-rate-mult rate :degree degree :distance distance)) (defun euro2 (time amp rate &key (degree 45)(distance 1)) (one-cut time amp :soundfile "/user/j/jcarlile/220b/hw1/sounds/euro2.wav" :amp-func '(0 1 1 1) :sample-rate-mult rate :degree degree :distance distance)) (defun hallo (time amp rate &key (degree 45)(distance 1)) (one-cut time amp :soundfile "/user/j/jcarlile/220b/hw1/sounds/hallo.wav" :amp-func '(0 1 1 1) :sample-rate-mult rate :degree degree :distance distance)) (defun kilo (time amp rate &key (degree 45)(distance 1)) (one-cut time amp :soundfile "/user/j/jcarlile/220b/hw1/sounds/kilo.wav" :amp-func '(0 1 1 1) :sample-rate-mult rate :degree degree :distance distance)) (defun tin (time amp rate &key (degree 45)(distance 1)) (one-cut time amp :soundfile "/user/j/jcarlile/220b/hw1/sounds/tin.wav" :amp-func '(0 1 1 1) :sample-rate-mult rate :degree degree :distance distance)) (defun tomaten (time amp rate &key (degree 45)(distance 1)) (one-cut time amp :soundfile "/user/j/jcarlile/220b/hw1/sounds/tomaten.wav" :amp-func '(0 1 1 1) :sample-rate-mult rate :degree degree :distance distance)) (defun yaya (time amp rate &key (degree 45)(distance 1)) (one-cut time amp :soundfile "/user/j/jcarlile/220b/hw1/sounds/yaya.wav" :amp-func '(0 1 1 1) :sample-rate-mult rate :degree degree :distance distance)) ;;longer snippets (defun tinkiwislong (time amp rate &key (degree 45)(distance 1)) (one-cut time amp :soundfile "/user/j/jcarlile/220b/hw1/sounds/tinkiwislong.wav" :amp-func '(0 1 1 1) :sample-rate-mult rate :degree degree :distance distance)) (defun yayalong (time amp rate &key (degree 45)(distance 1)) (one-cut time amp :soundfile "/user/j/jcarlile/220b/hw1/sounds/yayalong.wav" :amp-func '(0 1 1 1) :sample-rate-mult rate :degree degree :distance distance)) ;; one minute recording (defun market2 (time amp rate &key (degree 45)(distance 1)) (one-cut time amp :soundfile "/user/j/jcarlile/220b/hw1/sounds/market2.wav" :amp-func '(0 1 1 1) :sample-rate-mult rate :degree degree :distance distance)) ;; sequence ;; Function names from above ;; percussive sounds: perc, perc2, perc3, perc4 ;; short words: ananas, ein, eineuro, eineuro2, eineuro3, euro, euro2, hallo, kilo, tin, tomaten, yaya ;; longer : tinkiwislong, yayalong ;; whole: market2 ;; define lists so we can randomly choose which soundfile to play (defparameter percs (new random :of '(perc perc2 perc3 perc4))) (defparameter shorts (new random :of '(ananas ein eineuro eineuro2 eineuro3 euro euro2 hallo kilo tin tomaten yaya))) (defparameter longs (new random :of '(tinkimiwlong yayalong))) ;;idea ;; --start with sparse, random, spatialized word ;; --start mixing in traveling repeated words, random words die out ;; --then only travelling repeated words--> dying out to very sparse (like travelling impulse response, shorter words, shorter words.... ;; --bring in percussive sounds randomly--> migrate to separate speakers ;; --add in some travelling repeated words (with-sound (:srate 44100 :channels 8 :statistics t :output "marketSong8.snd") ;;sparse, slow tempo, randomly spatialized words (with-mix() "sparse" 0 (loop repeat 36 for time = 0 then (+ time (rhythm (next r) 50)) for amp1 = (amplitude (next asoft)) for rate = (ran :type :triangular :from 0.7 :below 1.3) for pos = (random 360) for func = (next shorts) do (funcall func time amp1 rate :degree pos))) (with-mix() "sparseAdd" 5 (loop repeat 50 for time = 0 then (+ time (rhythm (next r) 75)) ;;1.5x as fast for amp1 = (amplitude (next asoft)) for rate = 1 for pos = (ran :type :triangular :below 90) for func = (next shorts) do (funcall func time amp1 rate :degree pos))) (with-mix() "sparseAdd2" 10 (loop repeat 60 for time = 0 then (+ time (rhythm (next r) 150)) ;;3x as fast for amp1 = (amplitude (next a)) for rate = 1 for pos = (ran :type :triangular :from 180 :below 270) for func = (next shorts) do (funcall func time amp1 rate :degree pos))) ;;start mixing in travelling words (with-mix() "tin1" 15 (loop repeat 12 for time = 0 then (+ time (rhythm 'e 150)) for amp1 = (amplitude 'mp) for pos = (next ltor) do (tin time amp1 1 :degree pos))) (with-mix() "tin2" 25 (loop repeat 16 for time = 0 then (+ time (rhythm 'e 150)) for amp1 = (amplitude 'mp) for pos = (next rtol) do (tin time amp1 1 :degree pos))) (with-mix() "hallo1" 35 (loop repeat 27 for time = 0 then (+ time (rhythm 'e 150)) for amp1 = (amplitude (next afade)) for pos = (next mid360) do (format t "~s " time) (hallo time amp1 1 :degree pos))) (with-mix () "ananas2" 41 (loop repeat 36 for time = 0 then (+ time (rhythm 'e 150)) for amp1 = (amplitude (next afadesoft)) for pos = (next revmid360) do (ananas time amp1 1 :degree pos))) (with-mix() "kilo1" 43 (loop repeat 15 for time = 0 then (+ time (rhythm 'e 150)) for amp1 = (amplitude (next afadevsoft)) for pos = (next revmid360) do (kilo time amp1 1 :degree pos))) (with-mix() "hallo2" 46 (loop repeat 12 for time = 0 then (+ time (rhythm 'e 150)) for amp1 = (amplitude (next afade)) for pos = (next mid360) do (format t "~s " time) (hallo time amp1 1 :degree pos))) ;fast rhythm = drone sound (euro1 and euro2) (with-mix() "euro1" 50 (loop repeat 72 for time = 0 then (+ time (rhythm 'e 300)) for amp1 = (amplitude (next afade)) for pos = (next mid360) do (euro time amp1 1 :degree pos))) (with-mix () "euro2" 54 (loop repeat 54 for time = 0 then (+ time (rhythm 'e 300)) for amp1 = (amplitude (next afade)) for pos = (next revmid360) do (euro time amp1 1 :degree pos))) (with-mix() "tomaten1" 54 (loop repeat 14 for time = 0 then (+ time (rhythm 'q 120)) for amp1 = (amplitude (next afadesoft)) for pos = (next revmid360) do (tomaten time amp1 1 :degree pos))) (with-mix() "tomaten2" 54 (loop repeat 10 for time = 0 then (+ time (rhythm 'e. 120)) for amp1 = (amplitude (next afadesoft)) for pos = (next mid360) do (tomaten time amp1 1 :degree pos))) ;;mix in short percussion sounds (with-mix() "percuss" 55 (loop repeat 200 for time = 0 then (+ time (rhythm (next rp) 150)) for amp1 = (amplitude (next a2)) for pos = (random 360) for func = (next percs) do (funcall func time amp1 1 :degree pos))) ;;now move each to a separate speaker (with-mix() "percus1" 60 (loop repeat 200 for time = 0 then (+ time (rhythm (next rp) 240)) for amp1 = (amplitude (next a2)) for pos = (- (ran :type :gaussian :from 0 :below 60) 30) ;;-30 to 30 speaker 1 for rate = (ran :type :triangular :from 0.7 :below 1.3) do (perc time amp1 rate :degree pos))) (with-mix() "percus2" 60 (loop repeat 200 for time = 0 then (+ time (rhythm (next rp) 200)) for amp1 = (amplitude (next a2)) for pos = (ran :type :gaussian :from 60 :below 120) ;speaker2 for rate = (ran :type :triangular :from 0.7 :below 1.3) do (perc2 time amp1 rate :degree pos))) (with-mix() "percus3" 60 (loop repeat 200 for time = 0 then (+ time (rhythm (next rp) 230)) for amp1 = (amplitude (next a2)) for pos = (ran :type :gaussian :from 150 :below 210) ;speaker 3 for rate = (ran :type :triangular :from 0.7 :below 1.3) do (perc3 time amp1 rate :degree pos))) (with-mix() "percus4" 60 (loop repeat 200 for time = 0 then (+ time (rhythm (next rp) 220)) for amp1 = (amplitude (next a2)) for pos = (ran :type :gaussian :from 240 :below 300) ;speaker 4 for rate = (ran :type :triangular :from 0.7 :below 1.3) do (perc4 time amp1 rate :degree pos))) ;; bring back in some words (with-mix() "tomaten3" 75 (loop repeat 14 for time = 0 then (+ time (rhythm 'q 120)) for amp1 = (amplitude (next afadesoft)) for pos = (next revmid360) do (tomaten time amp1 1 :degree pos))) (with-mix() "tomaten4" 77 (loop repeat 10 for time = 0 then (+ time (rhythm 'e. 120)) for amp1 = (amplitude (next afadesoft)) for pos = (next mid360) do (tomaten time amp1 1 :degree pos))) (with-mix() "sparse2" 82 (loop repeat 36 for time = 0 then (+ time (rhythm (next r) 50)) for amp1 = (amplitude (next afadesoft)) for rate = (ran :type :triangular :from 0.7 :below 1.3) for pos = (random 360) for func = (next shorts) do (funcall func time amp1 rate :degree pos))) (with-mix() "sparseAdd3" 85 (loop repeat 50 for time = 0 then (+ time (rhythm (next r) 150)) ;;3x as fast for amp1 = (amplitude (next a)) for rate = 1 for pos = (ran :type :triangular :below 90) for func = (next shorts) do (funcall func time amp1 rate :degree pos))) (with-mix () "ananas3" 85 (loop repeat 54 for time = 0 then (+ time (rhythm 'e 150)) for amp1 = (amplitude (next afadesoft)) for pos = (next revmid360) do (ananas time amp1 1 :degree pos))) (with-mix () "ananas4" 87 (loop repeat 36 for time = 0 then (+ time (rhythm 'e 150)) for amp1 = (amplitude (next afadesoft)) for pos = (next mid360) do (ananas time amp1 1 :degree pos))) )