;;;
;;; c:\\program files\\acl62\\music39.cl
;;;
(load "c:\\program files\\acl62\\music38.cl")
(make-frame-from-list
'(triads-on-scale
(CM7-ion (value "C" "Dm" "Em" "F"
"G" "Am" "Bm-5" "Bdim"))
(Cm7-dor (value "Cm" "Dm" "-E" "F"
"Gm" "Am-5" "Adim" "-B"))
(Cm7-phr (value "Cm" "-D" "-E" "Fm"
"Gm-5" "Gdim" "-A" "-Bm"))
(CM7-lyd (value "C" "D" "Em" "-Gm-5"
"-Gdim" "G" "Am" "Bm"))
(C7-mix (value "C" "Dm" "Em-5" "Edim"
"F" "Gm" "Am" "-B"))
(Cm7-aeo (value "Cm" "Dm-5" "Ddim" "-E"
"Fm" "Gm" "-A" "-B"))
(Cm7-5-loc (value "Cm-5" "Cdim" "-D"
"-Em" "Fm" "-G" "-A" "-Bm"))
(Cm7-n (value "Cm" "Dm-5" "Ddim" "-E"
"Fm" "Gm" "-A" "-B"))
(Cm7-h (value "Cm" "Dm-5" "Ddim" "-Eaug"
"Fm" "G" "-A" "Bm-5" "Bdim"))
(Cm7-m (value "Cm" "Dm" "-Eaug" "F"
"G" "Am-5" "Adim" "Bm-5" "Bdim"
"-B" "-A" "Gm" "Fm"
"-E" "Dm-5" "Ddim" "Cm"))
(Cm7-dor-2 (value "Cm" "-Daug" "-E" "F"
"Gm-5" "Gdim" "Am-5" "Adim" "-Bm"))
(Cm7-5-loc+2 (value "Cm-5" "Cdim" "Dm-5"
"Ddim" "-Em" "Fm" "-Gaug" "-A"
"-B"))
(C7-lyd-7 (value "C" "D" "Em-5" "Edim"
"-Gm-5" "-Gdim" "Gm" "Am" "-Baug"))
(C7-hmp5 (value "-A6" "-Dm-5" "-Ddim"
"-Am6" "Em-5" "Edim" "Fm" "Gm-5"
"Gdim" "-A" "-Bm-5" "-Bdim"))
(C7-mmp5 (value "C" "Dm-5" "Ddim" "Em-5"
"Edim" "Fm" "Gm" "-Aaug" "-B"))
(C7-alt (value "Cm-5" "Cdim" "-Dm" "-Em"
"Eaug" "-G" "-A" "-Bm-5" "-Bdim"))
(C7-comd (value "Cm-5" "Cdim" "-Dm-5"
"-Ddim" "-Em-5" "-Edim" "Em-5"
"Edim" "-Gm-5" "-Gdim"
"Gm-5" "Gdim" "Am-5" "Adim" "-Bm-5" "-Bdim"))
(Cdim7-dim (value "Cm-5" "Cdim" "Dm-5"
"Ddim" "-Em-5" "-Edim" "Fm-5" "Fdim"
"-Gm-5" "-Gdim"
"-Am-5" "-Adim" "Am-5" "Adim" "Bm-5" "Bdim"))
(C7-wt (value "Caug" "Daug" "Eaug" "-Gaug"
"-Aaug" "-Baug"))
(C7-mixsus4 (value "C" "Dm" "Em-5" "Edim"
"F" "Gm" "Am" "-B"))
(C7-mix-6 (value "C" "Dm-5" "Ddim" "Em-5"
"Edim" "Fm" "Gm" "-Aaug" "-B"))))
;;;
;;; (get-triads-on-scale '("CM7" ion))
;;;
(defun get-triads-on-scale (pair)
(case (second pair)
(ion (modulate-key1-to-key2 (fget-i 'triads-on-scale 'CM7-ion) 'C (involve-atom-p
(first pair))))
(dor (modulate-key1-to-key2 (fget-i 'triads-on-scale 'Cm7-dor) 'C (involve-atom-p
(first pair))))
(phr (modulate-key1-to-key2 (fget-i 'triads-on-scale 'Cm7-phr) 'C (involve-atom-p
(first pair))))
(lyd (modulate-key1-to-key2 (fget-i 'triads-on-scale 'CM7-lyd) 'C (involve-atom-p
(first pair))))
(mix (modulate-key1-to-key2 (fget-i 'triads-on-scale 'C7-mix) 'C (involve-atom-p
(first pair))))
(aeo (modulate-key1-to-key2 (fget-i 'triads-on-scale 'Cm7-aeo) 'C (involve-atom-p
(first pair))))
(loc (modulate-key1-to-key2 (fget-i 'triads-on-scale 'Cm7-5-loc) 'C
(involve-atom-p (first pair))))
(n (modulate-key1-to-key2 (fget-i 'triads-on-scale 'Cm7-n) 'C (involve-atom-p
(first pair))))
(h (modulate-key1-to-key2 (fget-i 'triads-on-scale 'Cm7-h) 'C (involve-atom-p
(first pair))))
(m (modulate-key1-to-key2 (fget-i 'triads-on-scale 'Cm7-m) 'C (involve-atom-p
(first pair))))
(dor-2 (modulate-key1-to-key2 (fget-i 'triads-on-scale 'Cm7-dor-2)
'C (involve-atom-p (first pair))))
(loc+2 (modulate-key1-to-key2 (fget-i 'triads-on-scale 'Cm7-5-loc+2)
'C (involve-atom-p (first pair))))
(lyd-7 (modulate-key1-to-key2 (fget-i 'triads-on-scale 'C7-lyd-7) 'C
(involve-atom-p (first pair))))
(hmp5 (modulate-key1-to-key2 (fget-i 'triads-on-scale 'C7-hmp5) 'C
(involve-atom-p (first pair))))
(mmp5 (modulate-key1-to-key2 (fget-i 'triads-on-scale 'C7-mmp5) 'C
(involve-atom-p (first pair))))
(alt (modulate-key1-to-key2 (fget-i 'triads-on-scale 'C7-alt) 'C (involve-atom-p
(first pair))))
(comd (modulate-key1-to-key2 (fget-i 'triads-on-scale 'C7-comd) 'C
(involve-atom-p (first pair))))
(dim (modulate-key1-to-key2 (fget-i 'triads-on-scale 'Cdim7-dim) 'C
(involve-atom-p (first pair))))
(wt (modulate-key1-to-key2 (fget-i 'triads-on-scale 'C7-wt) 'C (involve-atom-p
(first pair))))
(mixsus4 (modulate-key1-to-key2 (fget-i 'triads-on-scale 'C7-mixsus4)
'C (involve-atom-p (first pair))))
(mix-6 (modulate-key1-to-key2 (fget-i 'triads-on-scale 'C7-mix-6) 'C
(involve-atom-p (first pair))))))
;;;
;;; (tell-triads-on-scale *w1*)
;;;
(defun collect-pairs-aux (lst)
(do ((l lst (cddr l))
(w))
((null l) (reverse w))
(push (list (first l) (second l)) w)))
(defun collect-pairs (lst)
(remove-duplicate (collect-pairs-aux (squash lst))))
(defun tell-triads-on-scale-aux (lst)
(let ((l (collect-pairs lst)))
(do ((ll l (cdr ll)))
((null ll))
(format t "~% ~a : ~a." (car ll) (get-triads-on-scale
(car ll))))))
(defun tell-triads-on-scale (wn)
(tagbody
(format t "~%***** ~a *****" (second (first wn)))
(format t "~%The original key is ~a." (first (first wn)))
(format t "~%Enter a key.")
loop1
(setf l1 (read-sentence))
(if (not (key-p (car l1)))
(go loop1))
(if (equal (car l1) (first (first wn)))
(setf l2 (cdr wn))
(setf l2 (modulate-key1-to-key2 (cdr wn) (first (first wn)) (car
l1))))
(format t "~%***** The key is ~a." (car l1))
(tell-triads-on-scale-aux l2)))