In my Dissertation, I worked a way to convert every chord and set in a modulo 12 rhythm,
so the entire catalog of FORTE are converted to rhythms, following the steps of Babitt:
As a hardcore serialist, Babbitt was interested in converting 12-tone rows to rhythms, in a kind of 12-tone rhythm theory.
Below, Wuorinen show one example of a typical Babbitt idea:
For the sake of explaining my idea of function, it's important to have in mind that for Babbitt, the order of the
row is very important and lead to different results in the pitch to rhythm conversion. Take a look in the example
In the preceeding figure, the order of the C major triad generate different rhythms. In the example (0 4 7) have a
different result from (4 0 7) or (7 0 4).
In the system I developed in my Dissertation, the order does NOT matter, since (0 4 7), (7 0 4) or (4 0 7) will result
in exactly the same rhythm, as you can see below:
In my system, the transposition equals rotation (as well as in Babbitt)
And every chord symbol can be transformed in a rhythm:
Even voicings can be converted in longer Rhythms (the more spread the voicing, the longer the rhythm):
So I did every FORTE SET in the catalog, in this way:
Below, you can see the example of the rhythm of the major triad (Forte number 3-11b).
In the 1st bar there is the prime form (0 4 7).
In each subsequent bar there is a rotation of the first set by 16th note increments.
HERE IS THE POINT, for the sake of the new function !
The note C (that I call Rhythmic Fundamental, the "root" of the rhythm) is being displaced, as
you can see in the circled notes.
THE SET WRAP AROUND ITSELF, always forming 12 time-points (always twelve 16th notes),
in a different way from Babbit, where the order of the sets generates longer rhythms.
THIS WAY IS MORE INTERESTING For Popular and Minimalist Repetition Music, as
well as 12 tone music.
In the bottom staff, there are the complementary rhythm of the 3-11b set, i.e., the 9-11a
set. In the catalog, every set is presented alongside its complementary set and every set is
presented in 3/4 (16th notes) and in 12-8 (with the 8th note as the base value for the increments
So the function needed would be the one that mirror exacty this kind of conversion, not the tradicional time-point-system conversion,
so I could use my catolog inside Opusmodus, connecting the diferent sets, like this:
Or even using portions of the Rhythmic Sets, by truncating some of them, like this:
In the preceeding example, only parts of the 2 sets are used (9 time points out of 12 in the
first and 8 time points out of 12 in the second).
So, I hope someone could help me to find a way of implementing this.
Maybe Janusz or Stephane could find interesting to develop this kind of idea inside
All the best !
;;; ...an idea ;;; how to import some TEXT and translate it to integer-sequences to use this data ;;; for LIVE-CODING. also possible without .txt, but i tried to IMPORT it. perhaps ;;; in your live-coding session a friend of you is writing the text in a different ;;; location and you could share it (the path) via CLOUD :-D ;;; i know, this kind of data... is not very smart, but a little bit steam-punky :-) (defparameter *map-integer1* '(((a à á â ã ä å æ ą) 0) (b 1) ((c ç ć) 2) (d 3) ((e è é ê ë ę) 4) (f 5) (g 6) (h 7) ((i ì î ï) 8) (j 9) (k 10) ((l ł) 11) (m 12) ((n ñ ń) 13) ((o ò ó ô õ ö) 14) (p 15) (q 16) (r 17) ((s ś ß) 18) (t 19) ((u ù ú û ü) 20) (v 21) (w 22) (x 23) ((y ý ÿ) 24) ((z ż ź) 25))) ;;; 1) open/write a .txt-file ;;; 2) define your path (inside the loop) ;;; 3) start the loop ;;; 4) write/change your .txt, and SAVE it ;;; => every 2 seconds it will be read by the code (loop repeat 60 do (progn (print (progn (setf x (string-to-list (let ((in (open "/Users/meierandre/Desktop/test.txt"))) ;; use your own path!! (read-line in)))) (text-map *map-integer1* (loop for i in x append (explode i))))) (print x)) do (sleep 2)) ;;; every 2 seconds the loop is reading your .txt, change variable x and PRINT it
for this example i used PRINT (so you see what is happening), but you could also "rewrite" a variable inside your sound-live-coding-CODE/FUNCTION
Bildschirmvideo aufnehmen 2019-11-02 um 23.16.58.mov
perhaps OPMO could extend its GEN-ROTATE like that (or use this CODE for it)... not only single-steps, also a list of steps...
;;; SIMPLE FUNCTION (defun gen-rotate* (alist seq) (loop for i in alist collect (setf seq (gen-rotate i seq)))) ;;; EXAMPLES (list-plot (flatten (gen-rotate* '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18) '(1 2 3 4 5 6 7 8 9 10))) :join-points t :point-radius 0 :style :fill) (list-plot (gen-rotate* '(9 8 7 6 5 4 3 2 1) '(1 2 3 4 5 6 7 8 9 10)) :join-points t :point-radius 0 :style :fill) (list-plot (flatten (gen-rotate* '(1 2 3 4 5 4 3 2 1) '(1 2 3 4 5 6 7 8 9 10))) :join-points t :point-radius 0 :style :fill) (list-plot (gen-rotate* '(1 2 3 4 5 4 3 2 1) '(1 2 3 4 5 6 7 8 9 10)) :join-points t :point-radius 0 :style :fill)