i'm sure that it would also work with tonality-map,
but i was interested to code a simple version for my own to understand all the things :-)
;;; i wanted to map every interval-sequence to every possible pitchfield...
;;; all the sequences are "centered" (i needed that for my project)
;;; with :base you could move up and down the center
;;; :pitchfield has to be a OMN-pitch-sequence
;;; FUNCTION
(defun interval-projection-on-pitchfield (&key pitchfield intervals (base 0))
(let ((integers (pitch-to-integer (interval-to-pitch intervals)))
(base-0-integers)
(centering)
(pos))
(setq base-0-integers (loop for i in integers
collect (+ (abs (find-min integers)) i)))
(setq centering (if (evenp (find-max base-0-integers)) ;; finds the center of the seq
(/ (find-max base-0-integers) 2)
(/ (1+ (find-max base-0-integers)) 2)))
(loop for i in base-0-integers
do (setq pos (+ i (* -1 centering) base)) ;; compensating center & base
when (< pos 0) do (setq pos 0) ;; corr if intervals to big (+/-)
when (> pos (1- (length pitchfield))) do (setq pos (1- (length pitchfield)))
collect (nth pos pitchfield))))
;;; EXAMPLE
(interval-projection-on-pitchfield :pitchfield (append
(expand-tonality '(c4 messiaen-mode5))
(expand-tonality '(c5 messiaen-mode5))
(expand-tonality '(c6 messiaen-mode5)))
:intervals '(1 2 3 1 2 -4 -3 -2 3 5 7 -2)
:base 12)
short question: is there a possibilty to build this
(append (expand-tonality '(c4 messiaen-mode5))
(expand-tonality '(c5 messiaen-mode5))
(expand-tonality '(c6 messiaen-mode5)))
with ONE function (i need more ambitus then 1 octave)...
thanx, andré