Posted July 15, 20168 yr 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é
July 15, 20168 yr Thank you for this very interesting function André. I would love to have more easy way and tools for working with tonality on more than one octave. This one is a very good one and can be very useful when working with pitchfields. About your question, i don't know another way to construct your pitch field based on multiple expand-tonality into One function. May be Janusz ? anyway, i like very much your function. Thanks again for sharing it. SB.
July 15, 20168 yr Author dear stephane thanx to you! volià, here is a simple short code for this "problem"... regards andré ;;;FUNCTION (defun multiple-expand-tonality (&key startpitch octaves tonality) (remove-duplicates ;remove is for "cutting" if there are too much pitches (OMN loops last octave!) (loop repeat octaves with pitch = startpitch append (expand-tonality (list pitch tonality)) do (setq pitch (car (pitch-transpose 12 (list pitch))))))) ;;;EXAMPLE (multiple-expand-tonality :startpitch 'c2 :octaves 3 :tonality 'messiaen-mode1)
July 15, 20168 yr Perfect, thank you but would be useful be able to create a pitch-field based on multiple tonality like that: (multiple-expand-tonality :startpitch 'c2 :octaves 3 :tonality '(messiaen-mode1 messiaen-mode3 messiaen-mode4)) but it is already very good like that. Thank you very much. Stéphane
July 15, 20168 yr Author violà, i think this is what you are looking for... (defun multiple-expand-tonality (&key startpitch octaves tonality) (remove-duplicates ;remove is for "cutting" if there are too much pitches (OMN loops last octave!) (loop repeat octaves with pitch = startpitch with cnt = 0 when (= cnt (length tonality)) do (setq cnt 0) append (expand-tonality (list pitch (nth cnt tonality))) do (incf cnt) do (setq pitch (car (pitch-transpose 12 (list pitch))))))) (multiple-expand-tonality :startpitch 'c2 :octaves 6 :tonality '(messiaen-mode1 messiaen-mode2 messiaen-mode3))
July 16, 20168 yr Wonderful André ! Thank you very much. i will experiment with this stuff asap next week ! Stéphane
July 16, 20168 yr Tonality can be any sequence: (setf messiaen (append (expand-tonality '(c4 messiaen-mode1)) (expand-tonality '(c5 messiaen-mode2)) (expand-tonality '(c6 messiaen-mode3)))) (tonality-map '(messiaen :shift t) '(c4 cs4 d4 eb4 e4 f4 fs4 g4 gs4 a4 bb4 b4 c5 cs5 d5 eb5)) => (c4 d4 e4 fs4 gs4 bb4 c5 cs5 eb5 e5 fs5 g5 a5 bb5 c6 d6)
July 16, 20168 yr Examples with newly added keyword :sort (the default is t): ;;; TEST (setf mat '(c4 cs4 d4 ds4 e4 f4 fs4 g4 gs4 a4 bb4 b4 c5 cs5 d5)) (mapcar 'pitch-to-integer (list (tonality-map '((3 0 1 4 6 11 13) :root 3 :sort nil) mat) (tonality-map '((3 0 1 4 6 11 13) :root 3 :sort nil :shift t) mat) (tonality-map '((3 0 1 4 6 11 13) :root 3 :sort t :shift t) mat) (tonality-map '((3 0 1 4 6 11 13) :root 3 :sort nil :fixed t) mat) (tonality-map '((3 0 1 4 6 11 13) :root 3 :sort t :fixed t) mat) )) => ((3 4 4 6 6 6 11 11 11 12 13 13 15 16 16) (3 0 1 4 6 11 13 15 12 13 16 18 23 25 27) (3 4 6 7 9 14 16 15 16 18 19 21 26 28 27) (3 4 4 6 6 6 11 11 11 13 13 13 13 13 13) (3 4 4 6 7 7 9 9 9 14 14 14 16 16 16))
Create an account or sign in to comment