Syncronizing chord changes - kind of solved lol

hey,
is it possible to sync 2 live loops, so they change the chord identical?

As I understand it … That is the way live loops work .
As long as both loops use bpm / sleep values that
sync …

well i have a bit of a hard time to explain what i mean.
heres a working example but like that i cant play random notes of the chord which is playing. i want to be able to use like choose in it

bass = (ring (chord :e2, :minor),(chord :f2, :minor))
leads = (ring (chord :e3, :minor),(chord :f3, :minor))

counter = 0
live_loop :counters do
  counter += 1
  sleep 2
end

live_loop :bass do
  play bass[counter], amp: 3
  sleep 1
end

live_loop :lead do
  play leads[counter], amp: 0.75
  sleep 0.25
end

i it possible to get randomness in there?

bass = (ring :g2, :c3)
leads = (ring :g3,:b3,:c4,:e4)

counter = 0
live_loop :counters, sync: :metro do
  counter += 1
  sleep 2
end



counter1 = 0

live_loop :counters1, sync: :metro do
  counter1 += 1
  sleep 1
end


live_loop :bass, sync: :metro do
  tick_reset
  play bass[counter], amp: 3
  sleep (ring 1,0.5).tick(:asakdksa)
end


live_loop :lead, sync: :metro do
  
  tick_reset
  play leads[counter1], amp: 0.75
  sleep (ring 0.25,0.5,0.25).tick(:asdk)
end

???

bass = [:g2,:c3]
lead = [:g3,:b3,:c4,:e4]

live_loop :bass do
  for i in 0..1
    play bass[i]
    sleep 2
end; end

live_loop :lead do
  for i in 0..3
    play lead[rand_i(3)], amp: 0.5
    sleep 0.5
end; end

Well sure I know how to add randomness but that way I can’t tick with a counter and the chords go out of sync. I mean is there a good way to sync live loops so they change the chords simultaneously, without being affected by its sleep durations. Maybe some trick with ticks hmmmm

Something different

bass = (ring (chord :a3, :minor),(chord :f3, :major),(chord :c3, :major),(chord :g3, :major))

with_fx :flanger,mix: 0.5 do
  with_fx :reverb do
    live_loop :bass do
      use_synth :blade
      play q = bass.tick,release: 3,amp: 1.5
      use_synth :piano
      12.times do
        play q.choose + (ring 12,24).choose,amp: 0.5
        sleep 0.3
      end
    end
  end
end

damn bro you nailed it!
i change the chord with the random seed, hahaha

seeed = 141444122
slep = (ring 5, 5)

live_loop :seeeeds do
  
  seeed = seeed + 100
  
  set :randseeed, seeed
  
  puts :randseeed
  
  sleep (ring 4).tick(:tick21)
  
end

bass = (ring (chord :a3, :minor),(chord :f3, :major),(chord :c3, :major),(chord :g3, :major))#.choose



live_loop :bass do
  
  use_random_seed get(:randseeed)
  
  use_synth :blade
  
  
  play bass.choose,release: 1,amp: 1
  
  sleep (ring 0.5).choose
  
end

live_loop :lead do
  
  use_random_seed get(:randseeed)
  
  use_synth :piano
  
  play q = bass.choose,release: 3,amp: 0
  3.times do
    play q.choose
    sleep (ring 0.25).choose
  end
end

set_mixer_control!  amp: 1


live_loop :metro do
  sleep 3
end



seeed = 141444122
slep = (ring 5, 5)

live_loop :seeeeds do
  
  seeed = seeed + 100
  
  set :randseeed, (ring 541654,64654164,1235216,51531641,6411163,1646532132,1056847645).mirror.tick(:asjdfgsdf)     #seeed #
  
  puts :randseeed
  
  sleep (ring 4,2,6,2).tick(:tick21)
  
end



live_loop :kick, sync: :metro do
  stop
  
  use_bpm 120
  
  use_random_seed get(:randseeed)
  
  1.times do
    
    with_swing 0.5, pulse: 2 do
      sample :drum_heavy_kick, amp: 2.25 if (bools 1,1,1,1,1).choose #pick(4), amp: 0.75, get(:ampis).look
    end
    
    sleep (ring 1,1,1,1).choose#.tick(:asdkas) #(ring 0.5,0.5,0.5,1, 0.5,0.25,0.5,0.5, 0.5,0.5,0.5,0.5, 0.5,0.5, 1).tick(:asdjd) #get(:sleeps).tick(:t1212)
    
  end
  #sleep (ring 0.25,0.25,0).choose
end


live_loop :cymb, sync: :metro do
  stop
  use_bpm 120
  
  use_random_seed get(:randseeed)
  
  4.times do
    
    with_swing 0.25, pulse: 4 do
      sample :drum_cymbal_closed, amp: 1.75 if (bools 0,1,1,1,1).choose #pick(4), amp: 0.75, get(:ampis).look
      
    end
    sleep (ring 0.5,0.25,0.5,0.5,0.5,1,1).choose#.tick(:asdkas) #(ring 0.5,0.5,0.5,1, 0.5,0.25,0.5,0.5, 0.5,0.5,0.5,0.5, 0.5,0.5, 1).tick(:asdjd) #get(:sleeps).tick(:t1212)
    
  end
  #sleep (ring 0.25,0.25,0).choose
end


bass = (ring (chord :a3, :minor),(chord :f3, :major),(chord :c3, :major),(chord :g3, :major)).mirror           #.choose



live_loop :bass, sync: :metro do
  stop
  with_fx :flanger, phase: 0.25, wave: 3, depth: 0.5, invert_flange: 1, phase_offset: 0.5  do
    use_random_seed get(:randseeed)
    
    use_synth :blade
    play a = bass.choose,release: (ring 3,2,1).tick(:ashd),amp: (ring 0.25,0.75,1,0.25,0.5,0.75,1,1,1,1,1.25).mirror.choose,lpf: rrand(90,120)
    4.times do
      play a.choose + (ring 0,0,0,0,12).choose, release: 0.25,lpf: rrand(90,120), amp: (ring 0.25,0.75,1,0.25,0.5,0.75,1,1,1,1,1.25).mirror.choose, attack: (ring 0,0,0.25,0.5,0.25).mirror.choose if (bools 0,1,1,1).mirror.tick(:chas)
      sleep (ring  0.5,1).choose
    end
  end
end
live_loop :lead, sync: :metro do
  stop
  use_random_seed get(:randseeed)
  
  use_synth :fm
  use_synth_defaults divisor: 0, depth: 1.5, cutoff: rrand(90,120), pan: rrand(-1,1)
  
  play q = bass.choose,release: 3,amp: (ring 0.25,0.75,1,0.25,0.5,0.75,1,1,1,1,1.25).mirror.choose,lpf: rrand(90,120), amp: 0.75
  4.times do
    play q.choose + (ring 12,12,12,24,24,0).choose,lpf: rrand(90,120), release: (ring 0.25,0.5,0.25,0.125,0.5).tick(:asjd),amp: (ring 0.25,0.75,1,0.25,0.5,0.75,1,1,1,1,1.25).mirror.choose, attack: (ring 0.5,0.25,0).choose, amp: 0.75 if (bools 1,1,1,1, 0,1,0,1,1).mirror.tick(:chas1)
    sleep (ring 0.25, 0.5,0.25).choose
  end
end