;; work on Larry's "4-voice canon" (load "tiling.lisp") (load "selfsim.lisp") (load "modes.lisp") (load "spacegrp.lisp") (load "nondet.lisp") ;;;; USE THIS ONE... ;;; ; (define cyclops4p7x9 '(a b c d b c d b c)) ; 4 members ;; (lcm 7 4 9) = 252 cycles ;; (* 252 9) = 2268 total sixteenth notes ;; 4x * 63 for keys (65 67 69 70) ;; 7x * 36 for keys (72 74 76 77) ;; 9x * 28 for keys (46 48 50 51) ;; section order as follows: ssintro2, barebones, head1, head2, head3, head4, ;; mode1, mode2, bare16, bare25 ;; total length 570 seconds (about 10 minutes) ;; with sixteenths at quarter=120 ;;; (define ss4p7x9 (selfsim cyclops4p7x9 '(0 2 4 5 5) '(7 4 9) '(72 65 46) .25)) (events ss4p7x9 "barebones.midi") ;; with 16 (starts at 140) (define ss4p7x9b (selfsim cyclops4p7x9 '(0 2 4 5 5) '(7 16 4 9) '(72 84 65 46) .25)) (events ss4p7x9b "barebonesp16.midi") ;; with 16 & 25 (define ss4p7x9b (selfsim cyclops4p7x9 '(0 2 4 5 5) '(4 25) '(65 41) .25)) (events ss4p7x9b "bare25.midi") ;; intro (define ssintro (selfsim cyclops4p7x9 '(0 2 4 5 5) '(4 7 9) '(65 65 65 65) .25)) (events ssintro "ssintro.midi") ;; intro2 (define ssintro2 (selfsim cyclops4p7x9 '(0 2 4 5 5) '(7 9) '(65 65) .25)) (events ssintro2 "ssintro2.midi") (define ss479 (selfsimvec cyclops4p7x9 '(0 2 4 5 5) '(7 4 9) '(72 65 46))) ; (subseq ss4 10 50) (define ss4 (s-sim->slots cyclops4p7x9 '(0 2 4 5 5) 4 65 63)) (define ss7 (s-sim->slots cyclops4p7x9 '(0 2 4 5 5) 7 72 36)) (define ss9 (s-sim->slots cyclops4p7x9 '(0 2 4 5 5) 9 46 28)) (define ss79 (selfsimvec cyclops4p7x9 '(0 2 4 5 5) '(7 9) '(72 46))) (define ss49 (selfsimvec cyclops4p7x9 '(0 2 4 5 5) '(4 9) '(65 46))) (define ss47 (selfsimvec cyclops4p7x9 '(0 2 4 5 5) '(7 4) '(72 65))) ;;;;; (define ss479vec (slots->durs ss479)) (define ss4vec (slots->durs ss4)) (define ss7vec (slots->durs ss7)) (define ss9vec (slots->durs ss9)) ;; + e.g., (merge-slots (list s4 s7)) ;; some spice (transp (tintab (first ss4vec) pentatonic) -5) (consmatch (transp cymel2 56) ss47 'nil) (define multithing (process ; for x in ss479 for x in (consmatch (transp cymel2 56) ss47) for dur = .25 when (or (numberp x) (listp x)) ;; needed for rests output (multievent 'midi :keynum :keynum x :time (now) :duration dur) wait dur)) ;; store them in a midi file (events multithing "multithing.midi") ;;; ----> HEY LOOKEE HERE! (events (list (s-sim cyclops4p7x9 '(0 2 4 5 5) 9 46 28 .25) (s-sim cyclops4p7x9 '(0 2 4 5 5) 7 72 36 .25) (s-sim cyclops4p7x9 (transp (tintab '(0 2 4 5 5) pentatonic) -5) 7 77 36 .25) (s-sim cyclops4p7x9 '(0 2 4 5 5) 4 65 63 .25)) "modes1.midi") (events (list (s-sim cyclops4p7x9 '(0 2 4 5 5) 9 46 28 .25) (s-sim cyclops4p7x9 '(0 2 4 5 5) 7 72 36 .25) (s-sim cyclops4p7x9 (transp (tintab '(0 2 4 5 5) ionian) -5) 9 84 36 .25) (s-sim cyclops4p7x9 '(0 2 4 5 5) 4 65 63 .25)) "modes2.midi") (define (fromvec pitdur-pair) (process for x in (first pitdur-pair) for y in (second pitdur-pair) for dur = (* y .25) when (or (numberp x) (listp x)) ;; needed for rests output (multievent 'midi :keynum :keynum x :time (now) :duration dur) wait dur)) ;; store them in a midi file (events (list (fromvec ss4vec) (fromvec (list (layout .2 (transp (tintab (first ss4vec) stravmode) 19)) (second ss4vec))) (fromvec ss9vec)) "fromvec.midi") ;;;;; ;; !!! ---later in piece (myhand (first ss479vec) 6 8 'end) ; "hand4.midi" (myhand (first ss479vec) 10 5 'end) ; "hand3.midi" (myhand (first ss479vec) -19 -5 'end) ; "hand2.midi" (myhand (first ss479vec) 2 -5) ; "hand1.midi" ;(loop for x from -31 to 31 ; collect (list x (count x (melint (topline (first ss479vec)))))) ;((-31 1) (-30 3) (-29 3) (-28 11) (-27 3) (-26 17) (-25 6) (-24 9) (-23 9) ; (-22 9) (-21 19) (-20 9) (-19 33) (-18 10) (-17 12) (-16 8) (-15 0) (-14 0) ; (-13 0) (-12 9) (-11 18) (-10 27) (-9 27) (-8 18) (-7 45) (-6 27) (-5 63) ; (-4 36) (-3 27) (-2 9) (-1 0) (0 0) (1 18) (2 63) (3 17) (4 27) (5 27) (6 18) ; (7 45) (8 27) (9 63) (10 18) (11 9) (12 9) (13 0) (14 0) (15 0) (16 10) ; (17 15) (18 8) (19 33) (20 9) (21 17) (22 9) (23 10) (24 12) (25 4) (26 17) ; (27 3) (28 9) (29 3) (30 2) (31 1)) (define mthing2 (process for x in (myhand (first ss479vec) 6 8 'end) for y in (second ss479vec) for dur = (* .25 y) when (or (numberp x) (listp x)) ;; needed for rests output (multievent 'midi :keynum :keynum x :time (now) :duration dur) wait dur)) ;; store them in a midi file (events mthing2 "hand4.midi") ;; longerselfsim-melody (scf '(0 2 4 5 5) cyclops4p7x9) (define cymel '(0 2 4 5 2 4 5 2 4)) (define cymark (markov-analyze cymel)) (defun cymarx (len startpit) (transp (next cymark len) startpit)) (define melmark (markov-analyze (melint cymel))) (defun melmarx (len startpit) (let ((mels (next melmark (- len 1)))) (melint->line startpit mels))) ;; first selfsim-generation - length 81 (define cymel2 '(0 2 4 5 2 4 5 2 4 2 4 6 7 4 6 7 4 6 4 6 8 9 6 8 9 6 8 5 7 9 10 7 9 10 7 9 2 4 6 7 4 6 7 4 6 4 6 8 9 6 8 9 6 8 5 7 9 10 7 9 10 7 9 2 4 6 7 4 6 7 4 6 4 6 8 9 6 8 9 6 8)) ;; second-generation -- length 729 (define cymel3 '(0 2 4 5 2 4 5 2 4 2 4 6 7 4 6 7 4 6 4 6 8 9 6 8 9 6 8 5 7 9 10 7 9 10 7 9 2 4 6 7 4 6 7 4 6 4 6 8 9 6 8 9 6 8 5 7 9 10 7 9 10 7 9 2 4 6 7 4 6 7 4 6 4 6 8 9 6 8 9 6 8 2 4 6 7 4 6 7 4 6 4 6 8 9 6 8 9 6 8 6 8 10 11 8 10 11 8 10 7 9 11 12 9 11 12 9 11 4 6 8 9 6 8 9 6 8 6 8 10 11 8 10 11 8 10 7 9 11 12 9 11 12 9 11 4 6 8 9 6 8 9 6 8 6 8 10 11 8 10 11 8 10 4 6 8 9 6 8 9 6 8 6 8 10 11 8 10 11 8 10 8 10 12 13 10 12 13 10 12 9 11 13 14 11 13 14 11 13 6 8 10 11 8 10 11 8 10 8 10 12 13 10 12 13 10 12 9 11 13 14 11 13 14 11 13 6 8 10 11 8 10 11 8 10 8 10 12 13 10 12 13 10 12 5 7 9 10 7 9 10 7 9 7 9 11 12 9 11 12 9 11 9 11 13 14 11 13 14 11 13 10 12 14 15 12 14 15 12 14 7 9 11 12 9 11 12 9 11 9 11 13 14 11 13 14 11 13 10 12 14 15 12 14 15 12 14 7 9 11 12 9 11 12 9 11 9 11 13 14 11 13 14 11 13 2 4 6 7 4 6 7 4 6 4 6 8 9 6 8 9 6 8 6 8 10 11 8 10 11 8 10 7 9 11 12 9 11 12 9 11 4 6 8 9 6 8 9 6 8 6 8 10 11 8 10 11 8 10 7 9 11 12 9 11 12 9 11 4 6 8 9 6 8 9 6 8 6 8 10 11 8 10 11 8 10 4 6 8 9 6 8 9 6 8 6 8 10 11 8 10 11 8 10 8 10 12 13 10 12 13 10 12 9 11 13 14 11 13 14 11 13 6 8 10 11 8 10 11 8 10 8 10 12 13 10 12 13 10 12 9 11 13 14 11 13 14 11 13 6 8 10 11 8 10 11 8 10 8 10 12 13 10 12 13 10 12 5 7 9 10 7 9 10 7 9 7 9 11 12 9 11 12 9 11 9 11 13 14 11 13 14 11 13 10 12 14 15 12 14 15 12 14 7 9 11 12 9 11 12 9 11 9 11 13 14 11 13 14 11 13 10 12 14 15 12 14 15 12 14 7 9 11 12 9 11 12 9 11 9 11 13 14 11 13 14 11 13 2 4 6 7 4 6 7 4 6 4 6 8 9 6 8 9 6 8 6 8 10 11 8 10 11 8 10 7 9 11 12 9 11 12 9 11 4 6 8 9 6 8 9 6 8 6 8 10 11 8 10 11 8 10 7 9 11 12 9 11 12 9 11 4 6 8 9 6 8 9 6 8 6 8 10 11 8 10 11 8 10 4 6 8 9 6 8 9 6 8 6 8 10 11 8 10 11 8 10 8 10 12 13 10 12 13 10 12 9 11 13 14 11 13 14 11 13 6 8 10 11 8 10 11 8 10 8 10 12 13 10 12 13 10 12 9 11 13 14 11 13 14 11 13 6 8 10 11 8 10 11 8 10 8 10 12 13 10 12 13 10 12)) (define cymark3 (markov-analyze cymel3)) (defun cymarx3 (len startpit) (transp (next cymark3 len) startpit)) ;; fancy selfsim wiggle stuff ;; total len 448 (define wig7 (wigline3 (first (slots->durs ss7)) (second (slots->durs ss7)) '(2 1 -3))) (define wig9 (wigline3 (first (slots->durs ss9)) (second (slots->durs ss9)) '(2 1 -3))) (define wig79 (wigline3 (bottomline (first (slots->durs ss79))) (second (slots->durs ss79)) '(2 1 -3))) (define wig49 (wigline3 (bottomline (first (slots->durs ss49))) (second (slots->durs ss49)) '(2 1 -3))) (define wig47 (wigline3 (topline (first (slots->durs ss47))) (second (slots->durs ss47)) '(2 1 -3))) ;; try transp 58, 60, &tc. (define wig47b (list (consmatch (transp cymel2 58) (first wig47)) (second wig47))) (define (fancy-ss inss) (process for x in (first inss) for y in (second inss) for dur = (* .25 y) when (or (numberp x) (listp x)) ;; needed for rests output (multievent 'midi :keynum :keynum x :time (now) :duration dur) wait dur)) ;; store them in a midi file (events (fancy-ss wig47) "wig47.midi") (events (list (fancy-ss wig47b) (fancy-ss (slots->durs ss9))) "wig47cons.midi") (events (fancy-ss wig49) "wig49.midi") ;;;; TILES ;; USE [tilevec4a ... tilevec4f] --> all length 12, 6 parts ; (defun place-tiles (pattern-list tiling-vector) ; (defun place-cantiles (melody transp-levels tiling-vector) ;; 4x * 63 for keys (65 67 69 70) ;; 7x * 36 for keys (72 74 76 77) ;; 9x * 28 for keys (46 48 50 51) (define cymel '(0 2 4 5 2 4 5 2 4)) (define cyc4 (new cycle of (transp cymel 65))) (define cyc7 (new cycle of (transp cymel 72))) (define cyc9 (new cycle of (transp cymel 46))) (define cycd (new cycle of (transp cymel 56))) ; (place-tiles (list 65 67 69 70 'r 'r) tilevec4c) (define tilevecs4 (append tilevec4a tilevec4b tilevec4c tilevec4d tilevec4e tilevec4f)) (define all-tvecs4 (list tilevec4a tilevec4b tilevec4c tilevec4d tilevec4e tilevec4f)) (place-tiles (list cyc4 'r cyc7 'r cyc9 'r) tilevecs4) (defun tvecs (a-tilevec reps) (loop repeat reps append a-tilevec)) ; [ 1, 1, 2, 2, 1, 1 ] Length 12 (setf tilevec4a '(1 2 3 1 2 4 5 6 3 5 6 4)) ; [ 1, 1, 3, 1, 1, 1 ] Length 12 (setf tilevec4b '(1 2 3 1 2 4 5 6 4 5 6 3)) ; [ 2, 1, 1, 2, 1, 1 ] Length 12 (setf tilevec4c '(1 2 3 4 2 3 1 5 6 4 5 6)) ; [ 2, 1, 2, 2, 2, 1 ] Length 12 (setf tilevec4d '(1 2 3 4 2 5 1 6 3 4 6 5)) ; [ 3, 1, 1, 1, 1, 1 ] Length 12 (setf tilevec4e '(1 2 3 4 2 3 4 5 6 1 5 6)) ; [ 3, 1, 2, 1, 2, 1 ] Length 12 (setf tilevec4f '(1 2 3 4 2 5 4 6 3 1 6 5)) (define tiler1 (place-tiles (list cyc9 cyc7 cyc4 cyc7 'r cyc4) (tvecs tilevec4e 9))) (define tiler2 (place-tiles (list cyc9 cyc7 cyc4 cyc7 'r cyc4) tilevecs4 )) (define tiler (process for x in tiler2 for y = 1 for dur = (* .25 y) when (or (numberp x) (listp x)) ;; needed for rests output (multievent 'midi :keynum :keynum x :time (now) :duration dur) wait dur)) ;; store them in a midi file (events tiler "tiler2.midi")