condicionales

Algo común que seguramente querrás hacer es tocar más que notas al azar sino también tomar decisiones al azar y, dependiendo de cómo salga, correr más código u otro código. Por ejemplo, el querer tocar al azar una batería o platillo. Esto lo podemos hacer con if .

Tirar una moneda

Tiremos una moneda: si sale cara, que suene una batería, si sale cruz, que sea un platillo. Fácil. Podemos imitar el tiro de una moneda con la función one_in (introducida en la sección de aleatoriedad) especificando una probabilidad de 1 en 2 one_in(2). Entonces podemos utilizar el resultado para decidir entre dos piezas de código, el de batería o el de platillos:

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

Debes notar que los if están compuestos de tres partes:

Típico de lenguajes de programación, la noción de ‘sí’ está representada por el término true y la noción de ‘no’, por false. Así que debemos encontrar una pregunta que nos dé una respuesta true ofalse que es exactamente lo que hace one_in .

¿notas que la primera opción está envuelta entre el if y el else y que la segunda opción está envuelta entre el else y el end?. Igual que con los bloques do/end puedes poner múltiples líneas de código en cualquiera de esos lugares. Por ejemplo:

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

Esta vez estaremos pausando por un tiempo distinto dependiendo de cuál elección hagamos.

Condicional simple “if”

Algunas veces querrás ejecutar sólo una línea de código. Esto es posible al colocar if y después la pregunta al final. Por ejemplo:

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

Eso tocará acordes de diferentes números con una probabilidad diferente para cada nota .