Considere o seguinte live loop:
live_loop :foo do
play 50
sleep 1
end
Você pode estar se perguntando por que precisa do nome :foo
. Este nome é importante porque significa que este live loop é diferente de todos os outros live loops.
Nunca pode haver dois live loops sendo executados com o mesmo nome.
Isso quer dizer que se quisermos múltiplos live loops concorrentes, teremos que dar nomes diferentes a eles:
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
Agora você pode atualizar e modificar cada live loop independentemente e tudo simplesmente funciona.
Uma coisa que você já deve ter notado é que live loops funcionam automaticamente com o mecanismo de cue do thread que exploramos anteriormente.
Considere este código mal sincronizado:
live_loop :foo do
play :e4, release: 0.5
sleep 0.4
end
live_loop :bar do
sample :bd_haus
sleep 1
end
Vejamos se conseguimos corrigir o tempo e sincronismo sem pará-lo. Primeiro vamos consertar o loop :foo
para fazê-lo soar em um fator múltiplo do tempo do outro loop - algo como 0.5
servirá:
live_loop :foo do
play :e4, release: 0.5
sleep 0.5
end
live_loop :bar do
sample :bd_haus
sleep 1
end
Ainda não terminamos - você irá notar que as batidas não se alinham corretamente. Isso acontece porque os loops estão fora de fase. Vamos corrigir isso sincronizando um com o outro:
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
Wow, agora tudo está perfeitamente no tempo - tudo sem parar.
Agora vá em frente e programe ao vivo com live loops!