9.3 Live loop multipli

# Live loop multipli

Guarda questo live loop:

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

Forse ti stai chiedendo perché c'è il nome `:foo`. L'aggiunta del nome è importante perché significa che questo live loop è diverso da tutti gli altri.

*Non possono esistere due live loop con lo stesso nome*.

Questo significa che se vogliamo avere più live loop, dobbiamo assegnare loro nomi differenti:

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

Ora puoi aggiornare e cambiare ciascun live loop indipendentemente e tutto funziona.

## Sincronizzare i live loop

Una cosa che potresti aver notate è che i live loop lavora automaticamente con il sistema dei cue (segnali di sincronizzazione) che abbiamo visto in precedenza. Ogni volta che il live loop parte, genera un nuovo evento `cue` con il nome del live loop. Possiamo, di conseguenza, usare `sync` con uno di questi cue per essere sicuri che i loop siano sincronizzati tra loro senza fermare nulla.

Prendiamo in esame questo codice mal sincronizzato:

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

Vediamo se riusciamo a sistemare il timing e la sincronizzazione senza stoppare. Per prima cosa, sistemiamo il loop `:foo` cambiamo il fatto di sleep 1 a qualcosa tipo `0.5`:

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

Non abbiamo ancora finito del tutto, avrai notato come i battiti non siano perfettamente allineati. Questo perché i loop sono *fuori fase*. Sistemiamo il problema sincronizzandoli tra loro:

```
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, ora è tutto a tempo, senza aver fermato nulla.

Ora, andiamo avanti e programmiamo live con live loop!
