;;;
;;; c:\\program files\\acl62\\music5.cl
;;;
(load "c:\\program files\\acl62\\music4.cl")

(make-frame-from-list
  '(CP-pattern-M (p1 (value ("IM7" ion) ("VIm7" aeo) ("IIm7" dor)
                    ("V7" mix lyd-7 alt comd wt) ("IM7" ion)))
             (p2 (value ("IM7" ion) ("VI7" hmp5 alt comd) ("IIm7" dor)
                    ("V7" mix lyd-7 alt comd wt) ("IM7" ion)))
             (p3 (value ("IM7" ion) ("-III7" lyd-7) ("IIm7" dor)
                    ("V7" mix lyd-7 alt comd wt) ("IM7" ion)))
             (p4 (value ("IM7" ion) ("I7" mix lyd-7 alt comd wt) ("IVM7" lyd)
                    ("V7" mix lyd-7 alt comd wt) ("IM7" ion)))
             (p5 (value ("IM7" ion) ("I7" hmp5 alt comd) ("IVm7" dor)
                    ("-VII7" lyd-7) ("IM7" ion)))
             (p6 (value ("IM7" ion) ("I7" mix lyd-7 alt comd wt) ("IVM7" lyd)
                    ("+IVdim7" dim) ("IM7" ion)))
             (p7 (value ("IM7" ion) ("IVM7" lyd) ("IVm7" dor) ("-VII7" lyd-7) ("IM7")))
             (p8 (value ("IM7" ion) ("IVM7" lyd) ("VI7" hmp5 alt comd) ("IIm7" dor)
                    ("V7" mix lyd-7 alt comd wt) ("IM7" ion)))
             (p9 (value ("IM7" ion) ("IV7" lyd-7) ("IIIm7" phr) ("VI7" hmp5 alt comd)
                    ("IIm7" dor) ("V7" mix lyd-7 alt comd wt) ("IM7" ion)))
             (p10 (value ("IM7" ion) ("IVM7" lyd) ("IIIm7" phr) ("-III7" lyd-7)
                     ("IIm7" dor) ("V7" mix lyd-7 alt comd wt) ("IM7" ion)))
             (p11 (value ("IM7" ion) ("IV7" lyd-7) ("IIIm7" phr) ("-III7" lyd-7)
                     ("IIm7" dor) ("V7" mix lyd-7 alt comd wt) ("IM7" ion)))
             (p12 (value ("IM7" ion) ("IIm7" dor) ("IIIm7" phr) ("IIm7" dor)
                     ("IM7" ion)))
             (p13 (value ("IM7" ion) ("IVM7" lyd) ("IIIm7" phr) ("IIm7" dor)
                     ("IM7" ion)))
             (p14 (value ("IM7" ion) ("IIm7" dor) ("IIIm7" phr) ("IVM7" lyd)
                     ("IIIm7" phr) ("IIm7" dor) ("IM7" ion)))
             (p15 (value ("IM7" ion) ("-III7" lyd-7) ("-VIM7" lyd) ("-IIM7" lyd)
                     ("IM7" ion)))
             (p16 (value ("IM7" ion) ("II7" mix lyd-7 alt comd wt)
                     ("V7" mix lyd-7 alt comd wt) ("IM7" ion)))))

(make-frame-from-list
  '(CP-pattern-m (p1 (value ("Im" all) ("VIm7-5" loc) ("IIm7-5" loc)
                    ("V7" mix lyd-7 hmp5 alt comd wt) ("Im" all)))
             (p2 (value ("Im" all) ("-IIIM7" lyd) ("IIm7-5" loc)
                    ("V7" mix lyd-7 hmp5 alt comd wt) ("Im" all)))
             (p3 (value ("Im" all) ("VI7" mix lyd-7 hmp5 alt comd wt)
                    ("II7" mix lyd-7 hmp5 alt comd wt)
                    ("V7" mix lyd-7 hmp5 alt comd wt) ("Im" all)))
             (p4 (value ("Im" all) ("I7" mix lyd-7 hmp5 alt comd wt) ("IVm" dor)
                    ("V7" mix lyd-7 hmp5 alt comd wt) ("Im" all)))
             (p5 (value ("Im" all) ("-VII7" mix) ("-VI7" lyd-7)
                    ("V7" mix lyd-7 hmp5 alt comd wt) ("Im" all)))
             (p6 (value ("Im" all) ("IIm7-5" loc) ("-IIIM7" ion lyd)
                    ("IIm7-5" loc) ("Im" all)))
             (p7 (value ("Im" all) ("-III7" mix lyd-7 alt comd wt) ("-VIM7" lyd)
                    ("V7" mix lyd-7 hmp5 alt comd wt) ("Im" all)))
             (p8 (value ("Im" all) ("IVm7" dor) ("IIm7-5" loc)
                    ("V7" mix lyd-7 hmp5 alt comd wt) ("Im" all)))))

(make-frame-from-list
  '(CN-pattern-M (p1 (value ("IIm7" dor) ("V7" mix lyd-7 alt comd wt) ("IM7" ion)))
             (p2 (value ("IVM7" lyd) ("V7" mix lyd-7 alt comd wt) ("IM7" ion)))
             (p3 (value ("IVm7" dor) ("V7" mix lyd-7 alt comd wt) ("IM7" ion)))
             (p4 (value ("IVM7" lyd) ("IIIm7" phr) ("IM7" ion)))
             (p5 (value ("IVM7" lyd) ("-VII7" lyd-7) ("IM7" ion)))
             (p6 (value ("IVM7" lyd) ("-VII7" lyd-7) ("IM7" ion)))
             (p7 (value ("IVm7" dor) ("-VII7" lyd-7) ("IM7" ion)))
             (p8 (value ("-VI7" lyd) ("-VII7" lyd-7) ("IM7" ion)))))

(make-frame-from-list
  '(CN-pattern-m (p1 (value ("IVm7" dor) ("Vm7" phr) ("Im" all)))
             (p2 (value ("IVm7" dor) ("V7" mix lyd-7 hmp5 alt comd wt) ("Im" all)))
             (p3 (value ("IVm7" dor) ("IIm7-5" loc) ("Im" all)))
             (p4 (value ("IVm7" dor) ("-VII7" mix) ("Im" all)))
             (p5 (value ("-VIM7" lyd) ("-VII7" mix) ("Im" all)))))

(defun get-CP-M-aux (pn) (fget-i 'CP-pattern-M pn))
(defun get-CP-m-aux (pn) (fget-i 'CP-pattern-m pn))
(defun get-CN-M-aux (pn) (fget-i 'CN-pattern-M pn))
(defun get-CN-m-aux (pn) (fget-i 'CN-pattern-m pn))
;;;
;;; (get-CP-M 'p1 'C)
;;;
(defun get-CP-M (pn key)
  (let ((lst (get-CP-M-aux pn)))
    (replace-roman lst key)))

(defun get-CP-m (pn key)
  (let ((lst (get-CP-m-aux pn)))
    (replace-roman lst key)))

(defun get-CN-M (pn key)
  (let ((lst (get-CN-M-aux pn)))
    (replace-roman lst key)))

(defun get-CN-m (pn key)
  (let ((lst (get-CN-m-aux pn)))
    (replace-roman lst key)))
;;;
;;;
;;;
(defun select-key-at-random ()
  (nth (random 17) '(C +C -D D +D -E E F +F -G G +G -A A +A -B B)))

(defun select-pn-for-CP-M-at-random ()
  (nth (random 16) '(p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 p16)))

(defun select-pn-for-CP-m-at-random ()
  (nth (random 8) '(p1 p2 p3 p4 p5 p6 p7 p8)))

(defun select-pn-for-CN-M-at-random ()
  (nth (random 8) '(p1 p2 p3 p4 p5 p6 p7 p8)))

(defun select-pn-for-CN-m-at-random ()
  (nth (random 5) '(p1 p2 p3 p4 p5)))

;;;
;;;
;;;
(defun get-CP-M-at-random ()
  (get-CP-M (select-pn-for-CP-M-at-random) (select-key-at-random)))

(defun get-CP-m-at-random ()
  (get-CP-m (select-pn-for-CP-m-at-random) (select-key-at-random)))

(defun get-CP-at-random ()
  (let ((num (random 2)))
    (case num
      (0 (get-CP-M-at-random))
      (1 (get-CP-m-at-random)))))

;;;
;;;
;;;
(defun get-CN-M-at-random ()
  (get-CN-M (select-pn-for-CN-M-at-random) (select-key-at-random)))

(defun get-CN-m-at-random ()
  (get-CN-m (select-pn-for-CN-m-at-random) (select-key-at-random)))

(defun get-CN-at-random ()
  (let ((num (random 2)))
    (case num
      (0 (get-CN-M-at-random))
      (1 (get-CN-m-at-random)))))

;;;
;;;
;;;
(defun get-CP-M-with-key (key)
  (get-CP-M (select-pn-for-CP-M-at-random) key))

(defun get-CP-m-with-key (key)
  (get-CP-m (select-pn-for-CP-m-at-random) key))

;;;
;;;
;;;
(defun get-CN-M-with-key (key)
  (get-CN-M (select-pn-for-CN-M-at-random) key))

(defun get-CN-m-with-key (key)
  (get-CN-m (select-pn-for-CN-m-at-random) key))