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