;;;
;;; c:\\program files\\acl62\\music42.cl
;;;
(load "c:\\program files\\acl62\\music41.cl")
(make-frame-from-list
'(chords-on-scale
(CM7-ion-2 (value "CM7" "Dm7" "Em7"
"FM7" "G7" "Am7"
"Bm7-5"))
(Cm7-dor-2 (value "Cm7" "Dm7" "-EM7"
"F7" "Gm7" "Am7-5"
"-BM7"))
(Cm7-phr-2 (value "Cm7" "-DM7" "-E7"
"Fm7" "Gm7-5" "-AM7"
"-Bm7"))
(CM7-lyd-2 (value "CM7" "D7" "Em7"
"+Fm7-5" "GM7"
"Am7" "Bm7"))
(C7-mix-2 (value "C7" "Dm7" "Em7-5"
"FM7" "Gm7" "Am7"
"-BM7"))
(Cm7-aeo-2 (value "Cm7" "Dm7-5"
"-EM7" "Fm7" "Gm7"
"-AM7" "-B7"))
(Cm7-5-loc-2 (value "Cm7-5" "-DM7"
"-Em7" "Fm7"
"-GM7" "-AM7"
"-Bm7"))
(Cm7-n-2 (value "Cm7" "Dm7-5" "-EM7"
"Fm7" "Gm7" "-AM7"
"-B7"))
(Cm7-h-2 (value "CmM7" "Dm7-5"
"-EaugM7" "Fm7"
"G7" "-AM7"
"Bdim"))
(Cm7-m-2 (value "CmM7" "Dm7"
"-EaugM7" "F7"
"G7" "Am7-5" "Bm7-5"
"Cm7" "-B7" "-AM7"
"Gm7" "Fm7" "-EM7"
"Dm7-5"))
(Cm7-dor-2-2 (value "Cm7-5" "-DaugM7"
"-E7" "F7"
"Gm7-5" "Am7-5"
"-BmM7"))
(Cm7-5-loc+2-2 (value "Cm7-5"
"Dm7-5" "-EmM7"
"Fm7" "-GaugM7"
"-A7" "-B7"))
(C7-lyd-7-2 (value "C7" "D7" "Em7-5"
"+Fm7-5" "GmM7"
"Am7" "-BaugM7"))
(C7-hmp5-2 (value "Fm7" "-Ddim7"
"Edim7" "Gdim7"
"-Bdim7"))
(C7-mmp5-2 (value "C7" "Dm7-5"
"Em7-5" "FmM7"
"Gm7" "-AaugM7"
"-B7"))
(C7-alt-2 (value "Cm7-5" "-DmM7"
"-Em7" "EaugM7"
"-G7" "-A7"
"-Bm7-5"))
(C7-comd-2 (value "Cdim7" "-Ddim7"
"-Edim7" "Edim7"
"-Gdim7" "Gdim7"
"Adim7" "-Bdim7"))
(Cdim7-dim-2 (value "Cdim7" "Ddim7"
"-Edim7" "Fdim7"
"-Gdim7" "-Adim7"
"Adim7" "Bdim7"))
(C7-wt-2 (value "Caug" "Daug" "Eaug"
"-Gaug" "-Aaug"
"-Baug"))
(C7-mixsus4-2 (value "C7"
"Dm7" "Em7-5"
"FM7" "Gm7"
"Am7" "-BM7"))
(C7-mix-6-2 (value "C7" "Dm7-5"
"Em7-5" "FmM7"
"Gm7" "-AaugM7"
"-B7"))))
;;;
;;; (get-chords-on-scale '("CM7" ion))
;;;
(defun get-chords-on-scale (pair)
(case (second pair)
(ion (modulate-key1-to-key2
(fget-i 'chords-on-scale
'CM7-ion-2)
'C
(involve-atom-p
(first pair))))
(dor (modulate-key1-to-key2
(fget-i 'chords-on-scale
'Cm7-dor-2)
'C
(involve-atom-p
(first pair))))
(phr (modulate-key1-to-key2
(fget-i 'chords-on-scale
'Cm7-phr-2)
'C
(involve-atom-p
(first pair))))
(lyd (modulate-key1-to-key2
(fget-i 'chords-on-scale
'CM7-lyd-2)
'C
(involve-atom-p
(first pair))))
(mix (modulate-key1-to-key2
(fget-i 'chords-on-scale
'C7-mix-2)
'C
(involve-atom-p
(first pair))))
(aeo (modulate-key1-to-key2
(fget-i 'chords-on-scale
'Cm7-aeo-2)
'C
(involve-atom-p
(first pair))))
(loc (modulate-key1-to-key2
(fget-i 'chords-on-scale
'Cm7-5-loc-2)
'C
(involve-atom-p
(first pair))))
(n (modulate-key1-to-key2
(fget-i 'chords-on-scale
'Cm7-n-2)
'C
(involve-atom-p
(first pair))))
(h (modulate-key1-to-key2
(fget-i 'chords-on-scale
'Cm7-h-2)
'C
(involve-atom-p
(first pair))))
(m (modulate-key1-to-key2
(fget-i 'chords-on-scale
'Cm7-m-2)
'C
(involve-atom-p
(first pair))))
(dor-2 (modulate-key1-to-key2
(fget-i 'chords-on-scale
'Cm7-dor-2-2)
'C
(involve-atom-p
(first pair))))
(loc+2 (modulate-key1-to-key2
(fget-i 'chords-on-scale
'Cm7-5-loc+2-2)
'C
(involve-atom-p
(first pair))))
(lyd-7 (modulate-key1-to-key2
(fget-i 'chords-on-scale
'C7-lyd-7-2)
'C
(involve-atom-p
(first pair))))
(hmp5 (modulate-key1-to-key2
(fget-i 'chords-on-scale
'C7-hmp5-2)
'C
(involve-atom-p
(first pair))))
(mmp5 (modulate-key1-to-key2
(fget-i 'chords-on-scale
'C7-mmp5-2)
'C
(involve-atom-p
(first pair))))
(alt (modulate-key1-to-key2
(fget-i 'chords-on-scale
'C7-alt-2)
'C
(involve-atom-p
(first pair))))
(comd (modulate-key1-to-key2
(fget-i 'chords-on-scale
'C7-comd-2)
'C
(involve-atom-p
(first pair))))
(dim (modulate-key1-to-key2
(fget-i 'chords-on-scale
'Cdim7-dim-2)
'C
(involve-atom-p
(first pair))))
(wt (modulate-key1-to-key2
(fget-i 'chords-on-scale
'C7-wt-2)
'C
(involve-atom-p
(first pair))))
(mixsus4 (modulate-key1-to-key2
(fget-i 'chords-on-scale
'C7-mixsus4-2)
'C
(involve-atom-p
(first pair))))
(mix-6 (modulate-key1-to-key2
(fget-i 'chords-on-scale
'C7-mix-6-2)
'C
(involve-atom-p
(first pair))))))
;;;
;;; (tell-chords-on-scale *w1*)
;;;
(defun tell-chords-on-scale-aux (lst)
(let ((l (collect-pairs lst)))
(do ((ll l (cdr ll)))
((null ll))
(format t "~% ~a : ~a."
(car ll)
(get-chords-on-scale
(car ll))))))
(defun tell-chords-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-chords-on-scale-aux l2)))
(defun collect-chords-on-scales-of-CM7 ()
(remove-duplicate
(append (fget-i 'chords-on-scale
'CM7-ion-2)
(fget-i 'chords-on-scale
'CM7-lyd-2))))
(defun collect-chords-on-scales-of-Cm7 ()
(remove-duplicate
(append (fget-i 'chords-on-scale
'Cm7-dor-2)
(fget-i 'chords-on-scale
'Cm7-phr-2)
(fget-i 'chords-on-scale
'Cm7-aeo-2)
(fget-i 'chords-on-scale
'Cm7-n-2)
(fget-i 'chords-on-scale
'Cm7-h-2)
(fget-i 'chords-on-scale
'Cm7-m-2)
(fget-i 'chords-on-scale
'Cm7-dor-2-2))))
(defun collect-chords-on-scales-of-Cm7-5 ()
(remove-duplicate
(append (fget-i 'chords-on-scale
'Cm7-5-loc-2)
(fget-i 'chords-on-scale
'Cm7-5-loc+2-2))))
(defun collect-chords-on-scales-of-C7 ()
(remove-duplicate
(append (fget-i 'chords-on-scale
'C7-mix-2)
(fget-i 'chords-on-scale
'C7-lyd-7-2)
(fget-i 'chords-on-scale
'C7-hmp5-2)
(fget-i 'chords-on-scale
'C7-mmp5-2)
(fget-i 'chords-on-scale
'C7-alt-2)
(fget-i 'chords-on-scale
'C7-comd-2)
(fget-i 'chords-on-scale
'C7-wt-2)
(fget-i 'chords-on-scale
'C7-mixsus4-2)
(fget-i 'chords-on-scale
'C7-mix-6-2))))
(defun collect-chords-on-scales-of-Cdim7 ()
(fget-i 'chords-on-scale 'Cdim7-dim))
;;;
;;; (collect-chords-on-scales "CM7")
;;;
(defun collect-chords-on-scales (chord)
(cond ((search-s1-in-s2 "m7-5" chord)
(modulate-key1-to-key2
(collect-chords-on-scales-of-Cm7-5)
'C
(involve-atom-p chord)))
((search-s1-in-s2 "dim" chord)
(modulate-key1-to-key2
(collect-chords-on-scales-of-Cdim7)
'C
(involve-atom-p chord)))
((search-s1-in-s2 "m7" chord)
(modulate-key1-to-key2
(collect-chords-on-scales-of-Cm7)
'C
(involve-atom-p chord)))
((search-s1-in-s2 "M7" chord)
(modulate-key1-to-key2
(collect-chords-on-scales-of-CM7)
'C
(involve-atom-p chord)))
((search-s1-in-s2 "7" chord)
(modulate-key1-to-key2
(collect-chords-on-scales-of-C7)
'C
(involve-atom-p chord)))))
;;;
;;; (tell-chords-on-scales *w1*)
;;;
(defun tell-chords-on-scales-aux (l)
(let ((lst (collect-chords l)))
(do ((ll lst (cdr ll)))
((null ll))
(format t "~% ~a : ~a."
(car ll)
(collect-chords-on-scales
(car ll))))))
(defun tell-chords-on-scales (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-chords-on-scales-aux l2)))
|