Acum stim deja suficient pentru a incepe cu adevarat sa facem ceva interesant. In aceasta sectiune vom construi pe baza a ceea ce am invatat in sectiunile precedente si iti voi arata cum poti incepe sa compui muzica live si sa o transformi in interpretare pe scena. Pentru asta avem nevoie de 3 lucruri:
In regula, sa-i dam bataie! Sa programam live primele noastre sunete. Mai intai avem nevoie de o functie care contine codul pe care vrem sa-l executam. Sa incepem cu ceva simplu. Vrem de asemenea sa reluam in bucla apelurile catre aceasta functie intr-un thread:
define :my_loop do
play 50
sleep 1
end
in_thread(name: :looper) do
loop do
my_loop
end
end
Daca ti se pare putin complicat, te poti intoarce sa recitesti sectiunile despre functii si thread-uri. Nu este prea complicat daca deja ai studiat aceste lucruri.
Avem aici definitia unei functii care doar reda nota 50 si face pauza pe durata unei batai. Apoi definim un thread denumit ‘:looper’ care doar reia in bucla apelul ‘my_loop’.
Daca rulezi acest cod, vei auzi nota 50 repetata iar si iar…
Acum incepe partea distractiva. In timp ce codul inca ruleaza schimba 50 cu alt numar, sa zicem 55, apoi apasa pe butonul Run din nou. S-a schimbat! In direct!
Nu s-a adaugat un nou strat deoarece folosim un thread-uri cu denumire, ceea ce permite sa se execute un singur thread pentru fiecare nume. De asemenea, sunetul s-a schimbat pentru ca am redefinit functia. Am dat o noua definitie pentru ‘:my_loop’. Cand thread-ul ‘:looper’ a reluat bucla, a apelat noua definitie.
Incearca sa-l schimbi din nou, schimba nota, schimba timpul pentru pauza. Ce-ar fi sa adaugi o instructiune ‘use_synth’? De exemplu, schimba cu:
define :my_loop do
use_synth :tb303
play 50, release: 0.3
sleep 0.25
end
Acum suna destul de interesant, dar putem sa-l facem si mai colorat. In loc sa redam aceeasi nota iar si iar, incerca sa redai un acord:
define :my_loop do
use_synth :tb303
play chord(:e3, :minor), release: 0.3
sleep 0.5
end
Ce-ar fi sa redam aleator notele dintr-un acord:
define :my_loop do
use_synth :tb303
play choose(chord(:e3, :minor)), release: 0.3
sleep 0.25
end
Sau sa alegem o valoare aleatoare pentru cutoff:
define :my_loop do
use_synth :tb303
play choose(chord(:e3, :minor)), release: 0.2, cutoff: rrand(60, 130)
sleep 0.25
end
La final, sa adaugam niste tobe:
define :my_loop do
use_synth :tb303
sample :drum_bass_hard, rate: rrand(0.5, 2)
play choose(chord(:e3, :minor)), release: 0.2, cutoff: rrand(60, 130)
sleep 0.25
end
Acum lucrurile devin incitante!
Totusi, inainte sa incepi sa programezi live folosind functii si thread-uri, opreste-te putin si citeste sectiunea urmatoare despre ‘live_loop’ care va schimba pentru totdeauna modul in care programezi cu Sonic Pi…