;;;
;;; 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)))
|