Conditionelen

Eén van de dingen die je op een zeker moment zeker wil gaan doen is,dat je niet alleen willekeurige noten wil spelen (zie de voorgaande sectie hierover) maar ook een willekeurige (random) beslissing kunnen maken en gebaseerd op de uitkomst van andere uitgevoerde code of andere code. Zo wil je bijvoorbeeld een drum of cimbaal willekeurig bespelen. Dit kunnen we bereiken met de instructie ‘als’.

Een muntje opgooien

Laten we een muntje opgooien: Als het kop is, speel je een trommel, als het munt is, speel je een cimbaal. Makkelijk. We kunnen kop of munt nabootsen met onze one_in functie (voorgesteld in onze sectie over willekeurigheid) door een waarschijnlijkheid in te bouwen van 1 op 2: ‘one_in(2)’. We kunnen het resultaat,vervolgens gebruiken om te kunnen kiezen tussen twee stukken van de code, de code om de trommel te spelen en de code om de cimbaal te spelen :

loop do
  if one_in(2)
    sample :drum_heavy_kick
  else
    sample :drum_cymbal_closed
  end
  
  sleep 0.5
  
end

Merk op dat ‘if’ verklaringen drie delen hebben:

Typisch in programmeertalen, wordt ja aangeduid door de term ‘true’ en neen door de term ‘false’. Dus moeten we een vraag vinden die ons een true of false antwoord geeft, dat is precies wat `one_in´ doet.

Merk op hoe de eerste keuze verpakt is tussen if en else en de tweede keus verpakt tussen else en end. Net zoals bij een do/end blok kun je meerdere coderegels in beide plaatsen zetten. Bijvoorbeeld:

loop do
  if one_in(2)
    sample :drum_heavy_kick
    sleep 0.5
  else
    sample :drum_cymbal_closed
    sleep 0.25
  end
  
end

Dit keer hebben we verschillende rustijden afhankelijk van de keuze die wordt gemaakt.

Gewoon if

Soms wilt je optioneel slechts één regel code uitvoeren. Dit is mogelijk door het plaatsen van if en vervolgens de vraag aan het einde. Bijvoorbeeld:

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

Dit zal akoorden met andere getallen, bij iedere gespeelde noot, de kans op een verschillende mogelijkheid spelen.