;;;
;;; c:\\program files\\acl62\\music26.cl
;;;
(load "c:\\program files\\acl62\\music25.cl")

(defun divide-a-chord (scn)
  (let ((char (involve-char-p scn)))
    (divide-s1-with-s2 scn char)))

(defun translate-sc-to-number (sc)
  (cond ((equal sc "C") 1.0)
      ((equal sc "+C") 1.5)
      ((equal sc "D") 2.0)
      ((equal sc "+D") 2.5)
      ((equal sc "E") 3.0)
      ((equal sc "F") 3.5)
      ((equal sc "+F") 4.0)
      ((equal sc "G") 4.5)
      ((equal sc "+G") 5.0)
      ((equal sc "A") 5.5)
      ((equal sc "+A") 6.0)
      ((equal sc "B") 6.5)))

(defun translate-number-to-sc (n)
  (let ((num (confine-a-number-2 (confine-a-number-2 n))))
    (case num
      (1.0 "C") (1.5 "+C") (2.0 "D") (2.5 "+D") (3.0 "E")
      (3.5 "F") (4.0 "+F") (4.5 "G") (5.0 "+G") (5.5 "A")
      (6.0 "+A") (6.5 "B"))))

(defun change-a-chord-by-n (chord n)
  (let* ((lst (divide-a-chord chord))
      (num (translate-sc-to-number (first lst)))
      (num2 (+ num n))
      (sc2 (translate-number-to-sc num2))
      (type (second lst)))
    (concatenate 'string sc2 type)))

(defun m2-up-a-chord (chord) (change-a-chord-by-n chord 0.5))
(defun m2-down-a-chord (chord) (change-a-chord-by-n chord -0.5))
(defun M2-up-a-chord (chord) (change-a-chord-by-n chord 1.0))
(defun M2-down-a-chord (chord) (change-a-chord-by-n chord -1.0))
(defun m3-up-a-chord (chord) (change-a-chord-by-n chord 1.5))
(defun m3-down-a-chord (chord) (change-a-chord-by-n chord -1.5))
(defun M3-up-a-chord (chord) (change-a-chord-by-n chord 2.0))
(defun M3-down-a-chord (chord) (change-a-chord-by-n chord -2.0))
(defun P4-up-a-chord (chord) (change-a-chord-by-n chord 2.5))
(defun P4-down-a-chord (chord) (change-a-chord-by-n chord -2.5))
(defun +4-5-up-a-chord (chord) (change-a-chord-by-n chord 3.0))
(defun +4-5-down-a-chord (chord) (change-a-chord-by-n chord -3.0))
(defun P5-up-a-chord (chord) (change-a-chord-by-n chord 3.5))
(defun P5-down-a-chord (chord) (change-a-chord-by-n chord -3.5))
(defun m6-up-a-chord (chord) (change-a-chord-by-n chord 4.0))
(defun m6-down-a-chord (chord) (change-a-chord-by-n chord -4.0))
(defun M6-up-a-chord (chord) (change-a-chord-by-n chord 4.5))
(defun M6-down-a-chord (chord) (change-a-chord-by-n chord -4.5))
(defun m7-up-a-chord (chord) (change-a-chord-by-n chord 5.0))
(defun m7-down-a-chord (chord) (change-a-chord-by-n chord -5.0))
(defun M7-up-a-chord (chord) (change-a-chord-by-n chord 5.5))
(defun M7-down-a-chord (chord) (change-a-chord-by-n chord -5.5))

;;;
;;; (m2-up-a-phrase '("CM7" (re do si la))
;;;
(defun m2-up-a-phrase (lst) (list (m2-up-a-chord (first lst)) (m2-up (second lst))))
(defun m2-down-a-phrase (lst) (list (m2-down-a-chord (first lst)) (m2-down (second lst))))
(defun M2-up-a-phrase (lst) (list (M2-up-a-chord (first lst)) (M2-up (second lst))))
(defun M2-down-a-phrase (lst) (list (M2-down-a-chord (first lst)) (M2-down (second lst))))
(defun m3-up-a-phrase (lst) (list (m3-up-a-chord (first lst)) (m3-up (second lst))))
(defun m3-down-a-phrase (lst) (list (m3-down-a-chord (first lst)) (m3-down (second lst))))
(defun M3-up-a-phrase (lst) (list (M3-up-a-chord (first lst)) (M3-up (second lst))))
(defun M3-down-a-phrase (lst) (list (M3-down-a-chord (first lst)) (M3-down (second lst))))
(defun P4-up-a-phrase (lst) (list (P4-up-a-chord (first lst)) (P4-up (second lst))))
(defun P4-down-a-phrase (lst) (list (P4-down-a-chord (first lst)) (P4-down (second lst))))
(defun +4-5-up-a-phrase (lst) (list (+4-5-up-a-chord (first lst)) (+4-5-up (second lst))))
(defun +4-5-down-a-phrase (lst) (list (+4-5-down-a-chord (first lst)) (+4-5-down (second lst))))
(defun P5-up-a-phrase (lst) (list (P5-up-a-chord (first lst)) (P5-up (second lst))))
(defun P5-down-a-phrase (lst) (list (P5-down-a-chord (first lst)) (P5-down (second lst))))
(defun m6-up-a-phrase (lst) (list (m6-up-a-chord (first lst)) (m6-up (second lst))))
(defun m6-down-a-phrase (lst) (list (m6-down-a-chord (first lst)) (m6-down (second lst))))
(defun M6-up-a-phrase (lst) (list (M6-up-a-chord (first lst)) (M6-up (second lst))))
(defun M6-down-a-phrase (lst) (list (M6-down-a-chord (first lst)) (M6-down (second lst))))
(defun m7-up-a-phrase (lst) (list (m7-up-a-chord (first lst)) (m7-up (second lst))))
(defun m7-down-a-phrase (lst) (list (m7-down-a-chord (first lst)) (m7-down (second lst))))
(defun M7-up-a-phrase (lst) (list (M7-up-a-chord (first lst)) (M7-up (second lst))))
(defun M7-down-a-phrase (lst) (list (M7-down-a-chord (first lst)) (M7-down (second lst))))

;;;
;;; (m2-up-phrases '(("CM7" (do re mi)) ("Dm7" (so fa mi))))
;;;
(defun m2-up-phrases (lst) (mapcar #'m2-up-a-phrase lst))
(defun m2-down-phrases (lst) (mapcar #'m2-down-a-phrase lst))
(defun M2-up-phrases (lst) (mapcar #'M2-up-a-phrase lst))
(defun M2-down-phrases (lst) (mapcar #'M2-down-a-phrase lst))
(defun m3-up-phrases (lst) (mapcar #'m3-up-a-phrase lst))
(defun m3-down-phrases (lst) (mapcar #'m3-down-a-phrase lst))
(defun M3-up-phrases (lst) (mapcar #'M3-up-a-phrase lst))
(defun M3-down-phrases (lst) (mapcar #'M3-down-a-phrase lst))
(defun P4-up-phrases (lst) (mapcar #'P4-up-a-phrase lst))
(defun P4-down-phrases (lst) (mapcar #'P4-down-a-phrase lst))
(defun +4-5-up-phrases (lst) (mapcar #'+4-5-up-a-phrase lst))
(defun +4-5-down-phrases (lst) (mapcar #'+4-5-down-a-phrase lst))
(defun P5-up-phrases (lst) (mapcar #'P5-up-a-phrase lst))
(defun P5-down-phrases (lst) (mapcar #'P5-down-a-phrase lst))
(defun m6-up-phrases (lst) (mapcar #'m6-up-a-phrase lst))
(defun m6-down-phrases (lst) (mapcar #'m6-down-a-phrase lst))
(defun M6-up-phrases (lst) (mapcar #'M6-up-a-phrase lst))
(defun M6-down-phrases (lst) (mapcar #'M6-down-a-phrase lst))
(defun m7-up-phrases (lst) (mapcar #'m7-up-a-phrase lst))
(defun m7-down-phrases (lst) (mapcar #'m7-down-a-phrase lst))
(defun M7-up-phrases (lst) (mapcar #'M7-up-a-phrase lst))
(defun M7-down-phrases (lst) (mapcar #'M7-down-a-phrase lst))