Aunque a simple vista sean simples, los FX son - internamente - unas bestias complejas. Su simplicidad a veces promueve a que la gente los sobre use en su música. Esto no es un problema si tienes una máquina poderosa, pero si - como yo - usas una Raspberry Pi para tus jams, debes ser cuidadoso acerca de cuanto trabajo le asignas para asegurarte que todo fluya sin pausas.
Considera este código:
loop do
with_fx :reverb do
play 60, release: 0.1
sleep 0.125
end
end
En este código estamos tocando la nota 60 con un tiempo de release muy, corto, por lo que es una nota muy corta. También queríamos reverb, así que lo envolvimos en un bloque de reverberación. Todo bien, excepto…
Veamos lo que hace el código. Primero bucleamos para que se repita por siempre todo lo que está dentro de él. Después tenemos un bloque with_fx
Esto significa que crearemos un FX reverberación cada vez que buclee. Esto es como tener un pedal de reverberación por cada vez que toques una cuerda de la guitarra. Es bueno poder hacerlo, pero no siempre lo querrás. Por ejemplo, este código tendrá dificultades en una Raspberry Pi. Todo el trabajo de crear la reverberación y después esperar hasta que ncesite ser parado y removido, es hecho por with_fx
pero esto consume mucho del CPU.
¿cómo lo haríamos más similar a cuando un guitarrista tiene sólo un pedal de reverberación a través del cual pasan todos los sonidos? Simple:
with_fx :reverb do
loop do
play 60, release: 0.1
sleep 0.125
end
end
Poniendo nuestro bucle dentro del bloque with_fx
. Así sólo creamos un paso a reverb para todas las notas del bucle. Este código es mucho más eficiente y funcionará bien en una Raspberry Pi.
Al utilizar with_fx
sobre una iteración en un bucle:
loop do
with_fx :reverb do
16.times do
play 60, release: 0.1
sleep 0.125
end
end
end
De esta forma, hemos sacado el with_fx
fuera de la parte interna del loop
y ahora estamos creando un nuevo reverb cada 16 notas.
Éste es un patrón tan común que with_fx
ofrece una opción para hacer esto mismo, pero sin tener que escribir el bloque 16.times
:
loop do
with_fx :reverb, reps: 16 do
play 60, release: 0.1
sleep 0.125
end
end
Ambos ejemplos, reps: 16
y 16.times do
, tendrán el mismo comportamiento. Básicamente, el reps: 16
repite el código dentro del bloque do/end
16 veces; así que puedes usar ambos de manera intercambiable, y utilizar aquel que te guste más.
Recuerda que no hay errores, sólo posibilidades. Sin embargo, según qué manera, se producen diferentes sonidos y características de ejecución. Así que experimenta y utiliza lo que te suene mejor y funcione en la plataforma que tengas.