9.3 Múltiplos Live Loops

# Múltiplos Live Loops

Considera o seguinte live loop:

```
live_loop :foo do
  play 50
  sleep 1
end
```

Podes ter-te perguntado porque necessita o nome `:foo`. O seu nome é importante porque significa que este live loop é diferente de todos os outros live loops.

*Nunca pode haver 2 live loops a correr com o mesmo nome*.

Isso quer dizer que se quisermos múltiplos live loops concorrentes, teremos que dar diferentes nomes:

```
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
```

Podemos agora actualizar e mudar cada live loop independentemente e tudo funciona.

## Sincronizando live loops

Uma coisa que poderás já ter notado é que os live loops funcionam automaticamente com o mecanismo de cue do threaad que exploramos anteriormente. Cada vez que o live loop repete, ele gera um novo envento `cue` com o nome do live loop. Podemos então `sync` nestes cues para assegurar que os nossos loops estão sincronizados sem ter que parar alguma coisa.

Considera este código muito 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
```

Vamos ver se conseguimos reparar o timing e a sincronização sem parar. Primeiro, vamos arranjar o loop `:foo` para fazer parar pelo factor de 1 - algo como `0.5` serve:

```
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 - notarás que os beats não se alinham correctamente. ISto é porque os loops estão *fora de fase*. Vamos resolver 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 a tempo - tudo sem ter que parar.

Agora avança e codifica ao vivo com live loops!
