Conditii

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’.

Datul cu banul

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:

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.

If simplu

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.