9.3 Mehrere Live-Loops

# Mehrere Live-Loops

Sieh dir den folgenden Live-Loop an:

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

Vielleicht fragst du dich, warum er den Namen `:foo` braucht. Dieser Name ist wichtig, weil er bedeutet, dass sich dieser Live-Loop von allen anderen Live-Loops unterscheidet.

*Es kann nie zwei Live-Loops mit dem selben Namen geben, die zur gleichen Zeit laufen*.

Das bedeutet, wenn wir mehrere Live-Loops gleichzeitig laufen lassen wollen, müssen wir ihnen einfach nur verschiedene Namen geben:

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

Du kannst jetzt beide Live-Loops unabhängig voneinander verändern, und alles funktioniert - einfach so.

## Live-Loops synchronisieren

Du hast vielleicht schon bemerkt, dass Live-Loops automatisch mit dem Thread-Cue-Mechanismus arbeiten, den wir uns bereits angeschaut haben. Mit jedem Mal wenn der Live-Loop einen Durchlauf beginnt, generiert er ein neues Cue-Ereignis, das den Namen des Live-Loops erhält. Wir können daher mit diesen Cues in `sync` bleiben und so sicherstellen, dass unsere Schleifen sich synchronisieren, ohne dass wir etwas anhalten müssen.

Schau dir diesen schlecht synchronisierten Code an:

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

Lass uns versuchen das Timing zu korrigieren ohne den Live-Loop zu stoppen. Zuerst lass uns den Live-Loop `:foo`reparieren, indem wir seine Sleep-Zeit zu einem Divisor von 1 machen - so etwas wie `0.5`wird z. B. funktionieren:

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

Damit sind wir aber noch nicht ganz fertig - du wirst bemerken, dass die Beats nicht so recht zusammenpassen. Der Grund dafür ist, dass die Live-Loops *out of phase* sind. Lass uns das reparieren, indem wir den einen mit dem anderen synchronisieren:

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

Toll, jetzt passt das Timing perfekt - ohne dass wir die Live-Loops anhalten mussten.

Jetzt leg los und programmiere live mit Live-Loops!
