Sync with other threads

sync  cue_id (symbol)

Pause/block the current thread until a cue heartbeat with a matching cue_id is received. When a matching cue message is received, unblock the current thread, and continue execution with the virtual time set to match the thread that sent the cue heartbeat. The current thread is therefore synced to the cue thread. If multiple cue ids are passed as arguments, it will sync on the first matching cue_id. The BPM of the cueing thread can optionally be inherited by using the bpm_sync: opt.

Introduced in v2.0

Examples

# Example 1

in_thread do
    sync :foo
    sample :ambi_lunar_land
  end
  sleep 5
  cue :foo
           



 
# this parks the current thread waiting for a foo sync message to be received.
 
 
 
# We send a sync message from the main thread.
# This then unblocks the thread above and we then hear the sample



# Example 2

in_thread do  
    loop do     
      cue :tick
      sleep 0.5 
    end
  end
 
  loop do                   
    sync :tick              
    sample :drum_heavy_kick 
  end



# Start a metronome thread
# Loop forever:
# sending tick heartbeat messages
# and sleeping for 0.5 beats between ticks
 
 
# We can now play sounds using the metronome.
# In the main thread, just loop
# waiting for :tick sync messages
# after which play the drum kick sample
 



# Example 3

sync :foo, :bar



# Wait for either a :foo or :bar cue



# Example 4

in_thread do  
    loop do     
      cue [:foo, :bar, :baz].choose
      sleep 0.5 
    end
  end
 
  in_thread do
    loop do                   
      sync :foo              
      sample :elec_beep 
    end
  end
  in_thread do
    loop do                   
      sync :bar              
      sample :elec_flip 
    end
  end
  in_thread do
    loop do                   
      sync :baz              
      sample :elec_blup 
    end
  end



# Start a metronome thread
# Loop forever:
# sending one of three tick heartbeat messages randomly
# and sleeping for 0.5 beats between ticks
 
 
# We can now play sounds using the metronome:
 
# In the main thread, just loop
# waiting for :foo sync messages
# after which play the elec beep sample
 
 
 
# In the main thread, just loop
# waiting for :bar sync messages
# after which play the elec flip sample
 
 
 
# In the main thread, just loop
# waiting for :baz sync messages
# after which play the elec blup sample