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 :fooreparieren, indem wir seine Sleep-Zeit zu einem Divisor von 1 machen - so etwas wie 0.5wird 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!