;;;
;;; c:\\program files\\acl62\\music38.cl
;;;
(load "c:\\program files\\acl62\\music37.cl")

(make-frame-from-list
   '(modulation-patterns-C (heikou-tyou-1 (value "Bm7-5" "E7" ("Am7") "D7" "Dm7" "G7" ("CM7")))
                   (heikou-tyou-2 (value ("CM7") "Am7" "Dm7" "G7" ("Am7") "Bm7-5"))
                   (zoku-tyou-1 (value ("CM7") "Am7" "D7" ("GM7") "Bm7" "Em7"))
                   (zoku-tyou-2 (value ("CM7") "-Bdim7" "Am7" "-A7" ("GM7") "Bm7" "Am7"))
                   (kazoku-tyou-1 (value "Dm7" "G7" "Gm7" "C7" ("FM7") "-BM7" "Gm7"
                                   "C7" ("FM7")))
                   (kazoku-tyou-2 (value ("CM7") "Em7" "Am7" "-BM7" "Am7" "Gm7"
                                   "C7" ("FM7")))
                   (hanon-up-1 (value ("CM7") "Dm7" "Em7" "A7" "-Em7" "-A7"
                                 ("-DM7") "-GM7"))
                   (hanon-up-2 (value "Dm7" "G7" "-Em7" "-A7" ("-DM7") "-Bm7"))
                   (zenon-up-1 (value ("CM7") "B7" "E7" "A7" ("DM7") "+Fm7" "Bm7"))
                   (zenon-up-2 (value ("CM7") "FM7" "-BM7" "-EM7" ("DM7") "Bm7"))
                   (3do-kei-1 (value ("CM7") "Dm7" "G7" ("-EM7") "Fm7" "-B7" ("-EM7")))
                   (3do-kei-2 (value ("CM7") "FM7" "Fm7" ("EM7") "AM7" "+Fm7" "B7" ("EM7")))
                   (zou4do (value "Em7" "Am7" "Dm7" "G7" ("-GM7") "-Am7"))
                   (6do-kei-1 (value ("CM7") "Dm7" "Gm7" "C7" ("-AM7") "Cm7" "F7"))
                   (6do-kei-2 (value ("CM7") "-BM7" "CM7" "E7" ("AM7") "+Fm7"))
                   (7do-kei-1 (value "Dm7" "G7" "Cm7" "F7" "-BM7" "-EM7" "F7" ("-BM7")))
                   (7do-kei-2 (value "FM7" "Em7" "-Em7" "Dm7" "+Cm7" ("BM7") "+Gm7"))))

(defun get-modulate-patterns (key)
  (if (eq key 'C)
    (fget-frame 'modulation-patterns-C)
   (modulate-key1-to-key2 (fget-frame 'modulation-patterns-C) 'C key)))

(defun list-modulate-patterns (key)
  (print (get-modulate-patterns key)))

(defun get-modulation ()
  (prog (key num)
    (format t "~%Enter a key !")
    (setf key (car (read-sentence)))
    (format t "~%1.平行調")
    (format t "~%2.属調")
    (format t "~%3.下属調")
    (format t "~%4.半音上の調")
    (format t "~%5.全音上の調")
    (format t "~%6.3度系の調")
    (format t "~%7.増4度の調")
    (format t "~%8.6度系の調")
    (format t "~%9.7度系の調")
    loop1
    (format t "~%Enter a number !")
    (setf num (car (read-sentence)))
    (if (member num '(1 2 3 4 5 6 7 8 9))
      (go loop2)
     (go loop1))
    loop2
    (case num
      (1 (return (list key
                (modulate-key1-to-key2 (fget-i 'modulation-patterns-C 'heikou-tyou-1) 'C key)
                (modulate-key1-to-key2 (fget-i 'modulation-patterns-C 'heikou-tyou-2) 'C key))))
      (2 (return (list key
                (modulate-key1-to-key2 (fget-i 'modulation-patterns-C 'zoku-tyou-1) 'C key)
                (modulate-key1-to-key2 (fget-i 'modulation-patterns-C 'zoku-tyou-2) 'C key))))
      (3 (return (list key
                (modulate-key1-to-key2 (fget-i 'modulation-patterns-C 'kazoku-tyou-1) 'C key)
                (modulate-key1-to-key2 (fget-i 'modulation-patterns-C 'kazoku-tyou-2) 'C key))))
      (4 (return (list key
                (modulate-key1-to-key2 (fget-i 'modulation-patterns-C 'hanon-up-1) 'C key)
                (modulate-key1-to-key2 (fget-i 'modulation-patterns-C 'hanon-up-2) 'C key))))
      (5 (return (list key
                (modulate-key1-to-key2 (fget-i 'modulation-patterns-C 'zenon-up-1) 'C key)
                (modulate-key1-to-key2 (fget-i 'modulation-patterns-C 'zenon-up-2) 'C key))))
      (6 (return (list key
                (modulate-key1-to-key2 (fget-i 'modulation-patterns-C '3do-kei-1) 'C key)
                (modulate-key1-to-key2 (fget-i 'modulation-patterns-C '3do-kei-2) 'C key))))
      (7 (return (list key
                (modulate-key1-to-key2 (fget-i 'modulation-patterns-C 'zou4do) 'C key))))
      (8 (return (list key
                (modulate-key1-to-key2 (fget-i 'modulation-patterns-C '6do-kei-1) 'C key)
                (modulate-key1-to-key2 (fget-i 'modulation-patterns-C '6do-kei-2) 'C key))))
      (9 (return (list key
                (modulate-key1-to-key2 (fget-i 'modulation-patterns-C '7do-kei-1) 'C key)
                (modulate-key1-to-key2 (fget-i 'modulation-patterns-C '7do-kei-2) 'C key)))))))