Ai putea dori nu doar sa redai o nota aleatoare (vezi sectiunea precedenta pentru aleatorism), dar si sa iei o decizie aleatoare si pe baza rezultatului ei sa executi o bucata de cod sau alta. De exemplu, ai putea dori sa redai la intamplare o toba sau un taler. Putem obtine acest lucru folosind instructiunea ‘if’.
Deci, sa dam cu banul: daca iese cap, redam toba, daca este pajura, redam talerul. Usor. Putem simula datul cu banul cu functia ‘one_in’ (prezentata in sectiunea despre aleatorism) specificand o probabilitate de 1 din 2: one_in(2)
. Putem apoi folosi rezultatul pentru a decide intre doua bucati de cod, cea pentru toba si cea pentru taler:
loop do
if one_in(2)
sample :drum_heavy_kick
else
sample :drum_cymbal_closed
end
sleep 0.5
end
Instructiunea ‘if’ are trei parti:
Intrebarea care trebuie pusa Prima optiune pentru codul de executat (daca raspunsul la intrebare este da) A doua optiune pentru codul de executat (daca raspunsul la intrebare este nu)
In general, in limbajele de programare, raspunsul da este reprezentat prin termenul ‘true’ (adevarat), iar raspunsul nu este reprezentat prin termenul ‘false’ (fals). Deci trebuie sa gasim o intrebare la care raspunsul este ‘true’ sau ‘false’, adica exact ceea ce face ‘one_in’.
Prima optiune este delimitata de ‘if’ si ‘else’, in timp ce a doua este delimitata de ‘else’ si ‘end’. La fel ca in cazul blocurilor do/end, poti pune mai multe linii de cod in oricare dintre cele doua locuri. De exemplu:
loop do
if one_in(2)
sample :drum_heavy_kick
sleep 0.5
else
sample :drum_cymbal_closed
sleep 0.25
end
end
De data asta vom face pauze de durate diferite in functie de algerile pe care le facem.
Uneori vrem ca o instructiune unica sa se execute optional. Acest lucru este posibil prin adaugarea unui ‘if’ si a conditiei la sfarsit. De exemplu:
use_synth :dsaw
loop do
play 50, amp: 0.3, release: 2
play 53, amp: 0.3, release: 2 if one_in(2)
play 57, amp: 0.3, release: 2 if one_in(3)
play 60, amp: 0.3, release: 2 if one_in(4)
sleep 1.5
end
Acest cod va reda acorduri cu componente diferite, cu probabilitati diferite pentru fiecare nota de a face parte din acestea.