Przyjrzyjmy się natępującej żywej pętli:
live_loop :foo do
play 50
sleep 1
end
Być może zastanawiałeś się dlaczego konieczna jest nazwa :foo
. Nazwa
ta jest ważna ponieważ oznacza, że ta konkrenta żywa pętla jest inna od wszystkich
innych żywych pętli.
W tym samym czasie nie mogą być uruchomione dwie żywe pętle o tej samej nazwie.
Oznacza to, że jeśli potrzebujemy kilku jednocześnie kręcących się żywych pętli, to po prostu musimy nadać im inne nazwy:
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
Możesz teraz aktualizować i zmieniać każdą z żywych pętli niezależnie i wszystio będzie po prostu działać.
Jedną z rzeczy, które być może już zauważyłeś to to, że żywe pętle
działają automatycznie z mechanizmem punktów cue dla wątków, które
poznaliśmy już wcześniej. Za każdym razem, gdy żywa pętla wykona pętlę,
generuje nowe zdarzenie cue
nadając mu nazwę taką samą jaką nadaliśmy
żywej pętli. Możemy więc sychroznizować się z wykorzystaniem funkcji
sync
na każdym zdarzeniu cue
aby upewnić się, że nasze pętle
są zsynchronizowane bez konieczności zatrzymywania czegokolwiek.
Spójrzmy na poniższy kod, który został źle zsynchronizowany:
live_loop :foo do
play :e4, release: 0.5
sleep 0.4
end
live_loop :bar do
sample :bd_haus
sleep 1
end
Zobaczmy czy możemy naprawić chronometraż (timing) bez zatrzymywania. Najpierw,
naprawmy pętlę :foo
tak, aby sprawić, że wartość parametru sleep będzie
współczynnikiem liczby 1 - coś jak 0.5
powinno być ok:
live_loop :foo do
play :e4, release: 0.5
sleep 0.5
end
live_loop :bar do
sample :bd_haus
sleep 1
end
To jeszcze nie koniec - powinieneś zauważyć, że uderzenia nie do końca ustawiają się odpowiednio. Dzieje się tak, ponieważ pętle nie są synchronizowane. Spróbujmy to naprawić przez ich synchronizację:
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
Łał, teraz wszystko perfekcyjnie w czas - i to wszystko bez zatrzymywania.
A teraz, nie zatrzymuj się i koduj na żywo z wykorzystaniem żywych pętli!