Bucle live multiple

Sa privim bucla live de mai jos:

live_loop :foo do
  play 50
  sleep 1
end

Te-ai putea intreba de ce trebuie sa se numeasca ‘:foo’. Acest nume este important deoarece ne spune ca aceasta bucla live este diferita de toate celelalte.

Nu pot exista doua bucle live cu acelasi nume care ruleaza in acelasi timp.

Asta inseamna ca daca vrem sa avem mai multe bucle live care ruleaza in acelasi timp, trebuie sa le dam nume diferite:

live_loop :foo do
  use_synth :prophet
  play :c1, release: 8, cutoff: rrand(70, 130)
  sleep 8
end
live_loop :bar do
  sample :bd_haus
  sleep 0.5
end

Acum poti modifica fiecare bucla live in mod independent si totul va continua sa functioneze.

Sincronizarea buclelor live

Un lucru pe care poate l-ai remarcat este ca buclele live folosesc automat mecanismul de marcaje pentru thread-uri pe care l-am vazut anterior. De fiecare data cand bucla live se reia, genereaza un nou eveniment ‘cue’ cu numele buclei. Putem deci sa ne sincronizam (‘sync’) cu aceste marcaje pentru a ne asigura ca buclele noastre sunt in faza fara sa oprim ceva.

Sa analizam acest cod sincronizat gresit:

live_loop :foo do
  play :e4, release: 0.5
  sleep 0.4
end
live_loop :bar do
  sample :bd_haus
  sleep 1
end

Sa vedem cum putem repara timing-ul si sa facem sincronizarea fara sa il oprim. Mai intai sa corectam bucla ‘:foo’ astfel incat pentru pauza sa avem o valoare care intra de un numar intreg de ori in 1 - ceva gen ‘0.5’ ar merge:

live_loop :foo do
  play :e4, release: 0.5
  sleep 0.5
end
live_loop :bar do
  sample :bd_haus
  sleep 1
end

Nu am terminat, totusi. Vei observa ca bataile nu se aliniaza corect. Asta se intampla deoarece buclele sunt defazate. Sa corectam aceasta problema sincronizandu-le una cu alta:

live_loop :foo do
  play :e4, release: 0.5
  sleep 0.5
end
live_loop :bar do
  sync :foo
  sample :bd_haus
  sleep 1
end

Totul este acum perfect sincronizat - fara sa fim nevoiti sa ne oprim.

Acum, mergi mai departe si programeaza live cu bucle live!