Hi Antonio,
No, I haven’t tried that yet!
The process I’m working on doesn’t involve Euclidean rhythms though, or at least I don’t think it does.
What’s troubling me right now is figuring out how to use the output of a loop as the input for the same loop. I’m trying to use ‘acum,’ but it gets confusing when processing complex lists. How do people usually deal with these cases?
I’ve found an alternative method to identify where multiple pulses coincide by calculating the LCM of each possible combination of the pulses I’m using, so that’s another approach.
Maybe I should explain what was the musical idea behind this. The idea was to play a certain polyrhythm and use all the coincidence points to interchange the voices falling on the same spot, creating more varied rhythms for each voice. The overall sound would still be the same polyrhythm, but with a kind of hocket logic.
Now it’s almost solved thanks to Karim’s patch. His patch (the output of omloop3 specifically) returns lists of this kind:
((2 3 4 5 6) (2 nil nil nil nil) (nil 3 nil nil nil) (2 nil 4 nil nil) (nil nil nil 5 nil) (2 3 nil nil 6) (2 nil 4 nil nil) (nil 3 nil nil nil) (2 nil nil 5 nil) (2 3 4 nil 6) (2 nil nil nil nil) (nil 3 nil 5 nil) (2 nil 4 nil nil) (2 3 nil nil 6) (2 nil 4 5 nil) (nil 3 nil nil nil) (2 nil nil nil nil) (2 3 4 nil 6) (nil nil nil 5 nil) (2 nil nil nil nil) (nil 3 nil nil nil) (2 nil 4 nil nil) (2 3 nil 5 6) (2 nil 4 nil nil) (nil 3 nil nil nil) (2 nil nil nil nil) (nil nil nil 5 nil) (2 3 4 nil 6) (2 nil nil nil nil) (nil 3 nil nil nil) (2 nil 4 5 nil) (2 3 nil nil 6) (2 nil 4 nil nil) (nil 3 nil 5 nil) (2 nil nil nil nil) (2 3 4 nil 6) (2 nil nil 5 nil) (nil 3 nil nil nil) (2 nil 4 nil nil) (2 3 nil nil 6) (nil nil nil 5 nil) (2 nil 4 nil nil) (nil 3 nil nil nil) (2 nil nil nil nil) (nil nil nil nil nil))
that tracks where each pulse will fall in each step. I managed to kind-of patch the next step, the rotation part (the rotation loop in the patch i shared), but the rotation is applied to each step independently (the asteriks are mine, to mark some of the places where a rotation is applied):
((6 2 3 4 5) (2 nil nil nil nil) (nil 3 nil nil nil) *(4 nil 2 nil nil)* (nil nil nil 5 nil) *(6 2 nil nil 3)* *(4 nil 2 nil nil)* (nil 3 nil nil nil) *(5 nil nil 2 nil)* *(6 2 3 nil 4)* (2 nil nil nil nil) *(nil 5 nil 3 nil)* *(4 nil 2 nil nil)* (6 2 nil nil 3) (5 nil 2 4 nil) (nil 3 nil nil nil) (2 nil nil nil nil) (6 2 3 nil 4) (nil nil nil 5 nil) (2 nil nil nil nil) (nil 3 nil nil nil) (4 nil 2 nil nil) (6 2 nil 3 5) (4 nil 2 nil nil) (nil 3 nil nil nil) (2 nil nil nil nil) (nil nil nil 5 nil) (6 2 3 nil 4) (2 nil nil nil nil) (nil 3 nil nil nil) (5 nil 2 4 nil) (6 2 nil nil 3) (4 nil 2 nil nil) (nil 5 nil 3 nil) (2 nil nil nil nil) (6 2 3 nil 4) (5 nil nil 2 nil) (nil 3 nil nil nil) (4 nil 2 nil nil) (6 2 nil nil 3) (nil nil nil 5 nil) (4 nil 2 nil nil) (nil 3 nil nil nil) (2 nil nil nil nil) (nil nil nil nil nil))
The problem here is that the new order of the rotated elements is not remembered from sublist to sublist. So i think i need a loop that process the list entirely. That is to say, that if I have to rotate the 2-row (in this case index 0 of each sublist) with the 4-row (index 2), the loop should rotate these places in the whole list, and then update the positions of where is the 2-row now, where is the 3-row now, etc, before applying the loop again to this processed list.
I thought of using a list of pairs, where one element tells you to which row each pulse belongs, followed by the pulse in question, but the resulting list makes my head hurt