# Múltiplos Live Loops

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.

## Sincronizando live loops

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!