Jump to content
JulioHerrlein

Shuffle Elements

Recommended Posts

Dear, All

 

I need a function for shuffle elements. A function similar to URN in Pure Data.

 

The scenario:

 

1) I have a list of durations:

s s -s s s -s -s -s e -s s -s s -e e -e -e s -s

2) The lenghts together form a 6/4 timesignature or a 12/8.

3) Just repeating the rhythm is BORING !

4) I need variations, but I want to still sum 12/8 or 6/4.

5) So, I need to shuffle this elements, without changing the total of the sum of lenghts.

 

TWO APPROACHES:

 

 

1) RANDOM - How to randomize, not like the random sample, but, using each element JUST ONCE,

like an Hamiltonian Path ?

(Actually I don't like to random things, because I feel like I'm not composing...) I'm a control Freak ! Sorry !

2) RANDOM2 - How can I sort from sublists of the same rhtyhm EACH LIST MUST APPEAR JUST ONCE !

This approach sounds more controled

3) MY PREFERED ! How to split the lenght list, and make up combinations of sublists (absolutely controlled) ?

Like this:

 

COMPLETE LIST - (s s -s s s -s -s -s e -s s -s s -e e -e -e s -s)

 

 

SUB LISTS 1 (s s -s)

SUB LISTS 2 (s s -s -s )

SUB LISTS 4 (-s e -s s -s)

SUB LISTS 5 (s -e e -e)

SUB LISTS 6 (-e s -s)

 

Maybe I can Initialize each one as a setf

Brute force method...

 

(setf subleng1 ' (s s -s))

(setf subleng2  '(s s -s -s ))

(setf subleng3 '(-s e -s s -s))

(setf subleng4 '(s -e e -e))

ETC....

 

And after that use assemble-seq to the lenghts ?

Or assemble-seq is just for joining sections of the composition ?

 

Any help ?

Thank you all !!!

Best,

Julio

 

 

 

 

Share this post


Link to post
Share on other sites

I'm trying this now...

Workout from Nigel Morgan book

But need some help..

 

Rhythm list

(setf r1 '(s s -s)
      r2 '(s s -s)
      r3 '(-s -s e -s)
      r4 '(s -s s -e)
      r5 '(e -e -e s -s))
      
;; shuffling 10 times
(let ((r-lis nil))
 (dotimes (i 10)
  (push (rnd-unique 5'(1 2 3 4 5)) r-lis))
 r-lis)
 
;; Here is the problem: no succes to assemble
(setf r-list (assemble-section 'r r-lis))

> Error: "3" doesn't match array element type of "r
While executing: ccl::concat-to-simple*, in process Listener-1(6).

 

Please, help !

Best,

Julio

 

Share this post


Link to post
Share on other sites
(setf r1 '(s s -s)
      r2 '(s s -s)
      r3 '(-s -s e -s)
      r4 '(s -s s -e)
      r5 '(e -e -e s -s))

You need to flatten the list first:

(setf seq
      (flatten
       (let ((r-lis nil))
         (dotimes (i 10)
           (push (rnd-unique 5 '(1 2 3 4 5)) r-lis))
         r-lis)))

(setf r-list (assemble-section 'r seq))

 

You could do that:

(setf r1 '(s s -s)
      r2 '(s s -s)
      r3 '(-s -s e -s)
      r4 '(s -s s -e)
      r5 '(e -e -e s -s))

(setf seq (flatten (gen-eval 10 '(rnd-unique 5 '(1 2 3 4 5)))))
(setf r-list (assemble-section 'r seq))

 

Share this post


Link to post
Share on other sites
6 minutes ago, opmo said:

(setf r1 '(s s -s) r2 '(s s -s) r3 '(-s -s e -s) r4 '(s -s s -e) r5 '(e -e -e s -s)) You need to flatten the list first: (setf seq (flatten (let ((r-lis nil)) (dotimes (i 10) (push (rnd-unique 5 '(1 2 3 4 5)) r-lis)) r-lis))) (setf r-list (assemble-section 'r seq))

PERFECT !!!

added 2 minutes later
9 minutes ago, opmo said:

(setf r1 '(s s -s)
      r2 '(s s -s)
      r3 '(-s -s e -s)
      r4 '(s -s s -e)
      r5 '(e -e -e s -s))

You need to flatten the list first:

(setf seq
      (flatten
       (let ((r-lis nil))
         (dotimes (i 10)
           (push (rnd-unique 5 '(1 2 3 4 5)) r-lis))
         r-lis)))

(setf r-list (assemble-section 'r seq))

 

You could do that:


(setf r1 '(s s -s)
      r2 '(s s -s)
      r3 '(-s -s e -s)
      r4 '(s -s s -e)
      r5 '(e -e -e s -s))

(setf seq (flatten (gen-eval 10 '(rnd-unique 5 '(1 2 3 4 5)))))
(setf r-list (assemble-section 'r seq))

 

More Elegant !

 

8 minutes ago, opmo said:

(setf r1 '(s s -s)
      r2 '(s s -s)
      r3 '(-s -s e -s)
      r4 '(s -s s -e)
      r5 '(e -e -e s -s))

You need to flatten the list first:

(setf seq
      (flatten
       (let ((r-lis nil))
         (dotimes (i 10)
           (push (rnd-unique 5 '(1 2 3 4 5)) r-lis))
         r-lis)))

(setf r-list (assemble-section 'r seq))

 

You could do that:


(setf r1 '(s s -s)
      r2 '(s s -s)
      r3 '(-s -s e -s)
      r4 '(s -s s -e)
      r5 '(e -e -e s -s))

(setf seq (flatten (gen-eval 10 '(rnd-unique 5 '(1 2 3 4 5)))))
(setf r-list (assemble-section 'r seq))

 

 

added 3 minutes later

Thanks a lot, Janusz !

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


×