OpenMusic-Library zur regelbasierten Harmonie und Stimmführung.
Lorenz Lehmann
30.12.23 10cb19a83dbbfc61c6152d8325294bbb63166aba
sources/harmon-progress.lisp
@@ -6,6 +6,9 @@
;Supervision: Marlon Schumacher
;======================================
(in-package :omlead)
(om::defmethod! harmon-progress (harmon-database first-chord chordnumber &key avoid-repetitions voice-tie1 voice-tie2 voice-tie3 voice-tie4 voice-interval1 voice-interval2 voice-interval3 voice-interval4 voice-counter1  counter-interval1 voice-counter2 counter-interval2 voice-counter3 counter-interval3 voice-counter4 counter-interval4 voice-counter5 counter-interval5 voice-counter6 counter-interval6 base-list)
@@ -14,42 +17,7 @@
:numouts 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun mat-trans_oml (list)
(loop for y in (let (count-list)
                 (dotimes (i (length (car list)))
                   (setq count-list (cons i count-list))) (nreverse count-list))
collect (loop for x in list collect (nth y x))
))
(defun posn-match_oml (list positions)
  (cond ((null positions) '())
        ((atom positions) (nth positions list))
        (t (append (list (posn-match_oml list (car positions)))
                   (if (posn-match_oml list (cdr positions))
                       (posn-match_oml list (cdr positions))
                     '())))))
(defun subs-posn_oml (list position item)
  (loop for a from 0
        for b in list
        collect (if (= a position) item b)))
(defun oml- (list atom)
(mapcar (lambda (it) (- it atom)) list))
(defun find-dups_oml (liste)
(car
(remove nil
(mapcar #'(lambda (l c) (eq l c)) liste  (cdr liste)))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(let* ((harmon-database harmon-database)
@@ -613,7 +581,42 @@
                  (nreverse (push second external-list))
                  (values second))))))
               
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun mat-trans_oml (list)
(loop for y in (let (count-list)
                 (dotimes (i (length (car list)))
                   (setq count-list (cons i count-list))) (nreverse count-list))
collect (loop for x in list collect (nth y x))
))
(defun posn-match_oml (list positions)
  (cond ((null positions) '())
        ((atom positions) (nth positions list))
        (t (append (list (posn-match_oml list (car positions)))
                   (if (posn-match_oml list (cdr positions))
                       (posn-match_oml list (cdr positions))
                     '())))))
(defun subs-posn_oml (list position item)
  (loop for a from 0
        for b in list
        collect (if (= a position) item b)))
(defun oml- (list atom)
(mapcar (lambda (it) (- it atom)) list))
(defun find-dups_oml (liste)
(car
(remove nil
(mapcar #'(lambda (l c) (eq l c)) liste  (cdr liste)))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;end ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;