;;;
;;; c:\\program files\\acl62\\music17.cl
;;;
(load "c:\\program files\\acl62\\music16.cl")

;;;
;;; (get-triads '("CM7" ion)
;;;
(defun get-triads (pair)
  (let* ((ll (butlast (chord-scale pair)))
      (lst (append ll (list (first ll) (second ll) (third ll) (fourth ll))))
      (n (length lst)))
    (do ((nn n (1- nn))
       (l)
       (w))
      ((<= nn 4) (reverse w))
     (setf l (rotate-list-right lst nn))
     (push (list (first l) (third l) (fifth l)) w))))

(defun get-chords-from-scale (pair)
  (let* ((ll (butlast (chord-scale pair)))
      (nl (length ll))
      (lst (append ll ll))
      (n (length lst)))
    (do ((nn n (1- nn))
       (l)
       (w))
       ((<= nn nl) (reverse w))
     (setf l (rotate-list-right lst nn))
     (push (list (first l) (third l) (fifth l) (seventh l)) w))))

(defun 4th-interval-chords (pair)
  (let* ((ll (butlast (chord-scale pair)))
      (nl (length ll))
      (lst (append ll ll))
      (n (length lst)))
    (do ((nn n (1- nn))
       (l)
       (w))
       ((<= nn nl) (reverse w))
     (setf l (rotate-list-right lst nn))
     (push (list (first l) (fourth l) (seventh l) (tenth l)) w))))

(defun 4th-interval-triads (pair)
   (let* ((ll (butlast (chord-scale pair)))
       (nl (length ll))
       (lst (append ll ll))
       (n (length lst)))
     (do ((nn n (1- nn))
        (l)
        (w))
        ((<= nn nl) (reverse w))
      (setf l (rotate-list-right lst nn))
      (push (list (first l) (fourth l) (seventh l)) w))))

;;;
;;;
;;;
(defun 3rd-interval (pair)
  (let* ((ll (butlast (chord-scale pair)))
      (lst (append ll ll))
      (n (length lst)))
    (do ((nn n (- nn 2))
       (l)
       (w))
       ((<= nn -1) (reverse w))
     (setf l (rotate-list-right lst nn))
     (push (first l) w))))

(defun 4th-interval (pair)
  (let* ((ll (butlast (chord-scale pair)))
       (lst (append ll ll ll))
       (n (length lst)))
     (do ((nn n (- nn 3))
        (l)
        (w))
        ((<= nn -1) (reverse w))
      (setf l (rotate-list-right lst nn))
      (push (first l) w))))

(defun 5th-interval (pair)
  (let* ((ll (butlast (chord-scale pair)))
      (lst (append ll ll ll ll))
      (n (length lst)))
    (do ((nn n (- nn 4))
       (l)
       (w))
       ((<= nn -1) (reverse w))
     (setf l (rotate-list-right lst nn))
     (push (first l) w))))

(defun 6th-interval (pair)
  (let* ((ll (butlast (chord-scale pair)))
      (lst (append ll ll ll ll ll))
      (n (length lst)))
    (do ((nn n (- nn 5))
       (l)
       (w))
       ((<= nn -1) (reverse w))
     (setf l (rotate-list-right lst nn))
     (push (first l) w))))

(defun 7th-interval (pair)
  (let* ((ll (butlast (chord-scale pair)))
      (lst (append ll ll ll ll ll ll))
      (n (length lst)))
    (do ((nn n (- nn 6))
       (l)
       (w))
       ((<= nn -1) (reverse w))
      (setf l (rotate-list-right lst nn))
      (push (first l) w))))