;;;
;;; c:\\program files\\acl62\\music37.cl
;;;


(load "c:\\program files\\acl62\\music36.cl")
(load "c:\\program files\\acl62\\work1.cl")

(make-frame-from-list
 '(M7 (CM7 (value "E7" "+F7" "-G7"
                   "A7" "B7"))))

(make-frame-from-list
 '(m7 (Cm7 (value "+D7" "-E7" "E7"
                   "+A7" "-B7"))))

(make-frame-from-list
 '(m7-5 (Cm7-5 (value "+C7" "-D7"
                       "+D7" "-E7"
                       "+A7" "-B7"))))

(make-frame-from-list
 '(d7 (C7 (value "A7"))))

;;;
;;;
;;;
(defun get-M7-of-CM7 ()
   (fget-i 'M7 'CM7))

(defun get-m7-of-Cm7 ()
   (fget-i 'm7 'Cm7))

(defun get-m7-5-of-Cm7-5 ()
   (fget-i 'm7-5 'Cm7-5))
 (defun get-d7-of-C7 ()
   (fget-i 'd7 'C7))

;;;
;;;
;;;
(defun collect-DC-dominant-M7 (chord)
  (remove-duplicate
        (modulate-key1-to-key2
             (get-M7-of-CM7)
             'C
             (involve-atom-p chord))))

(defun collect-DC-dominant-m7 (chord)
  (remove-duplicate
        (modulate-key1-to-key2
             (get-m7-of-Cm7)
             'C
             (involve-atom-p chord))))

(defun collect-DC-dominant-m7-5 (chord)
  (remove-duplicate
        (modulate-key1-to-key2
             (get-m7-5-of-Cm7-5)
             'C
             (involve-atom-p chord))))

(defun collect-DC-dominant-d7 (chord)
  (remove-duplicate
        (modulate-key1-to-key2
             (get-d7-of-C7)
             'C
             (involve-atom-p chord))))

;;;
;;;
;;;
(defun collect-DC-dominant (chord)
  (cond ((search-s1-in-s2 "m7-5" chord)
           (collect-DC-dominant-m7-5 chord))
     ((search-s1-in-s2 "m7" chord)
           (collect-DC-dominant-m7 chord))
     ((search-s1-in-s2 "M7" chord)
           (collect-DC-dominant-M7 chord))
     ((search-s1-in-s2 "7" chord)
           (collect-DC-dominant-d7 chord))))