From 985d3bb91fd05bd8e95ec880e6e9fdc77aeb46e8 Mon Sep 17 00:00:00 2001 From: Lorenz Lehmann <lorenz.lehmann@students.muho-mannheim.de> Date: Thu, 28 Mar 2024 22:51:53 +0100 Subject: [PATCH] feat (source): add helper functions --- sources/gen-harmonies.lisp | 47 ++++++++++++++++++++--------------------------- 1 files changed, 20 insertions(+), 27 deletions(-) diff --git a/sources/gen-harmonies.lisp b/sources/gen-harmonies.lisp index 161f32d..6ced843 100644 --- a/sources/gen-harmonies.lisp +++ b/sources/gen-harmonies.lisp @@ -1,13 +1,3 @@ - -;====================================== -;OM-Lead, 2022-2024 -; -;Library for Rule-based Voice-Leading -;Author: Lorenz Lehmann -;Supervision: Marlon Schumacher -;====================================== - - (in-package :omlead) @@ -37,8 +27,9 @@ ;;;;;;;;;;;;;;;;;;negativ - (reverse (loop for i in (if (or (eq 'hold mode) (eq 'hold-mirror mode)) - (hold_oml negativ) (circular_oml negativ)) ;;endless down-list + (reverse (loop for counter + for i = (if (or (eq 'hold mode) (eq 'hold-mirror mode)) + (hold-list negativ counter) (circular-list negativ counter)) ;;endless down-list sum i into total until (> range-min (- fundamental total)) collect (- fundamental total) @@ -48,8 +39,9 @@ ;;;;;;;;;;;;;;;;;;positiv - (loop for i in (if (or (eq 'hold mode) (eq 'hold-mirror mode)) - (hold_oml positiv) (circular_oml positiv)) ;;endless up-list + (loop for counter + for i = (if (or (eq 'hold mode) (eq 'hold-mirror mode)) + (hold-list positiv counter) (circular-list positiv counter)) ;;endless up-list sum i into total until (< range-max (+ fundamental total)) collect (+ fundamental total))))))) @@ -100,20 +92,19 @@ (harmonies (if (car filter-harmonies) - (let ((filter-list harmonies)) + (remove nil (loop for filter-box in filter-harmonies + append (loop for rule in (second filter-box) + append (loop for harmony in harmonies + collect (if (tester_oml + (lambda (x) (and (<= (list-min_oml (third filter-box)) x) (>= (list-max_oml (third filter-box)) x))) + harmony) + (if (funcall rule (first filter-box) harmony) harmony) harmony))))) - - (loop for filter-box in filter-harmonies - do (loop for rule in (second filter-box) - - do (loop for harmony in filter-list - do (if (tester_oml - (lambda (x) (and (<= (list-min_oml (third filter-box)) x) (>= (list-max_oml (third filter-box)) x))) - harmony) - (if (not (funcall rule (first filter-box) harmony)) - (delete harmony filter-list)))))) - filter-list) - harmonies)) + harmonies)) + (harmonies (remove nil (loop for harmony in (remove-duplicates harmonies :test #'equal) + collect (if (find -1 (mapcar (lambda (pitch range) + (if (and (<= pitch (list-max_oml range)) (>= pitch (list-min_oml range))) pitch -1)) + harmony ranges)) nil harmony)))) ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ @@ -369,3 +360,5 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + \ No newline at end of file -- Gitblit v1.9.1