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