How to sync / explications en français

Hi,

i made this little piece of code to explain sync for french people but the code is international !

# the definitive guide about sync in sonic pi
# nlb



# tous les 4 temps un signal, cue in english,  nommé "go" est émis
#
#

live_loop :go do
  sleep 4
end

# 1er cas : sync en tant que paramètre de live_loop

# une fois le signal reçu, la live_loop devient autonome elle vit sa vie. elle boucle
# pourquoi il faut attendre 4 temps avant que cette live_loop se lance ?

live_loop :foo, sync: :go do
  sample :drum_cymbal_soft
  sleep 0.5
end


# https://in-thread.sonic-pi.net/t/live-loops-sync-questions/1172/23?u=nlb
# Robin Newman explique très bien la situation
## In other words for a sync to work you should make sure
##| that the cue is sent AFTER the sync is waiting for it.
##| For two live_loops starting at the same time, delay the one you wish to sync to slightly
##| and they will then start together. (The second one waits for the first to send a cue as it starts).

## En d'autres mots, pour que la sync fonctionne assurez-vous que le signal est envoyé après
## que la boucle à synchroniser attend pour le signal
## Pour deux live_loops commençant au même moment, retardez la boucle sur laquelle vous voulez synchroniser
## et elles démarreront ensemble, la seconde attend que la première lui envoie le signal

# Au temps 0, "metronome" et "foo5" se lancent.
# delay: 1 provoque que le signal (cue) est envoyé un temps après le départ.
# regardez le journal !

# remplacer uncomment par comment pour ne pas entendre cette partie
comment do
  (
    live_loop :metronome, delay: 1 do
      # delay start of this by 0.01 to allow other loops to be ready
      
      use_synth :beep
      play :a, amp:0.1
      sleep 1
    end
    
    live_loop :foo5, sync: :metronome do
      
      4.times do
        sample :drum_cowbell, amp: 0.25
        sleep 1
      end
    end
    
    live_loop :foo6, sync: :metronome do
      
      # faîtes des changements et [alt + R] tout reste synchronisé sur 4
      sample :drum_bass_soft
      sleep 0.5
      sample :drum_bass_soft
      sleep 0.5
      
      sample :drum_snare_soft
      sleep 1
    end
  )
end

# 2ème cas : sync à l'intérieur du bloc live_loop
# une fois le signal reçu, la live_loop devient autonome elle vit sa vie. elle boucle

comment do
  (
    # la boucle est lancée à chaque fois que le signal "four_beats" est reçu
    # MAIS une live_loop peut recevoir ce signal UNIQUEMENT si elle n'est pas en train d'être executée
    # sinon elle le loupe (rires...)
    
    # tous les 4 temps on lance un signal "four_beats"
    live_loop :four_beats do
      sleep 4
    end
    
    # on prend un ring de 8 notes.
    n = scale("c3", :major)
    # on affiche la longueur de ce ring
    puts n.length
    
    # foo2 se lancera tous les 4 temps si elle est libre, non occupée
    # notez qu'il n'y pas de sleep dans le bloc de la live_loop
    # Ici une note est jouée puis on passe à la prochaine note de la gamme avec tick
    
    live_loop :foo2 do
      # stop
      sync :four_beats
      use_synth :prophet
      play n.tick, sustain: 4, amp: 0.5
    end
    
    # foo3 se lancera tous les 4 temps si elle est libre, non occupée
    # Pas de chance 8*0.5 = 4 temps donc elle n'est pas libre lorqu'elle reçoit le signal
    # on peut se dire "que le musicien était tellement concentré à jouer qu'il n'a pas repris ses esprits
    # pour voir que le chef d'orchestre lui disait "eh joue" donc il a compris que la prochaine fois, il doit jouer
    
    live_loop :foo3 do
      #stop
      sync :four_beats
      use_synth :piano
      (n.length).times do
        play n.tick
        sleep 0.5
      end
    end
    
    # foo4 est libre lorsqu'arrive le signal "four_beats"
    # car elle dure un peu moins de 4 temps
    
    live_loop :foo4 do
      ##| stop
      sync :four_beats
      (7).times do
        sample :drum_bass_hard
        sleep 0.5
      end
      sample :drum_bass_hard
      sleep 0.49999999 # un peu plus court pour avoir le temps de relever la tête
    end
  )
end

Tout retour ou commentaire est le bienvenu !
Bonne lecture.

3 Likes

hi, (salut) it is a bit delayed due to the date of this post… nice demo of sync…
i have learn from it and it helps a lot to look at how to include the sync: and how to administrate it.
cool :clock9:

merci a toi (peut etre es tu toujours sur le forum)
bye