Polyphonic/polyrhythmic sequencing

After working on generative sequencing with Sonic Pi for a while I started trying out more straightforward sequencing. Have a look at this three-part sequencing code. You can play it globally by just changing the random_seed R, or by changing the random seed of the thread which is defining the pitches which are to be used (which are microtonal).
Or you can adjust the settings of each of the three pattern generating live_loops.

I guess it would be fun to control the respective parameters with a midi controller but I did not try to make that work.

Enjoy!

#Seed Sequencing w selected pitches

in_thread do
  use_random_seed 6 #changing the random_seed changes the pitches to be used by the patterns
  set :eins, rrand(60, 72)
  set :zwei, rrand(60, 72)
  set :drei, rrand(60, 72)
  set :vier, rrand(60, 72)
  set :fünf, rrand(60, 72)
  sleep 1
end



live_loop :pattern1 do
  use_bpm 60 #try 60.1 for phasing á la Steve Reich
  use_synth :sine
  R = 1 #setting the random seed
  use_random_seed R
  set :x, 16 #setting the length of the first pattern
  get[:x].times do
    set :a, [get[:eins], get[:zwei], get[:drei], get[:vier], get[:fünf]].choose
    if rand < 0.2 #setting the density; 0 = no notes, 1 = maximum notes
      play get[:a], amp: rrand(0.5, 1), sustain: 0.1, release: 0.2, pan: - 0.5
    end
    sleep 0.125
  end
  #sleep 1.5 #if a break between pattern repetitions is desired
end


live_loop :pattern2 do
  use_bpm 60
  use_synth :sine
  use_random_seed R + 1 #setting a relation to the random seed
  set :x, 12 #setting the length of the second pattern
  get[:x].times do
    set :a1, [get[:eins], get[:zwei], get[:drei], get[:vier], get[:fünf]].choose
    if rand < 0.3 #setting the density; 0 = no notes, 1 = maximum notes
      play get[:a1], amp: rrand(0.5, 1), sustain: 0.1, release: 0.2, pan: 0.5
    end
    sleep 0.125
  end
  #sleep 1.5 #if a break between pattern repetitions is desired
end

live_loop :pattern3 do
  use_bpm 60
  use_synth :sine
  use_random_seed R + 2 #setting a relation to the random seed
  set :x, 12 #setting the length of the third pattern
  get[:x].times do
    set :a2, [get[:eins], get[:zwei], get[:drei], get[:vier], get[:fünf]].choose
    if rand < 0.2 #setting the density; 0 = no notes, 1 = maximum notes
      play get[:a2] - 12, amp: rrand(0.5, 1), sustain: 0.1, release: 0.2, pan: 0
    end
    sleep 0.125
  end
  sleep 1.5 #if a break between pattern repetitions is desired
end