Este mes vamos a sumergirnos en uno de los efectos más potentes y flexibles de Sonic Pi: el :slicer
. Al final de este artículo, habrás aprendido cómo manipular el volumen de nuevas formas muy interesantes. Esto te permitirá crear nuevos ritmos y estructuras rítmicas, ampliando tus posibilidades sonoras.
Entonces, ¿qué hace realmente el FX :slicer
? Una forma de pensar en ello es como si alguien jugara con el control de volumen de tu televisor o equipo de música. Echemos un vistazo, pero primero, escucha el profundo gruñido del siguiente código que activa el sintetizador :prophet
:
synth :prophet, note: :e1, release: 8, cutoff: 70
synth :prophet, note: :e1 + 4, release: 8, cutoff: 80
Ahora, vamos a pasarlo por el efecto :slicer
:
with_fx :slicer do
synth :prophet, note: :e1, release: 8, cutoff: 70
synth :prophet, note: :e1 + 4, release: 8, cutoff: 80
end
Escucha cómo el slicer le pone y le quita volumen al audio, con un beat regular. Fíjate también en cómo el :slicer
afecta a todo el audio generado entre los bloques do
/end
. Puedes controlar la velocidad a la que se enciende y apaga el audio con la opción phase:
, que es una abreviatura de duración de fase (phase duration en inglés). Su valor por defecto es 0.25
, que significa 4 veces por segundo usando el BPM por defecto de 60. Hagámoslo más rápido:
with_fx :slicer, phase: 0.125 do
synth :prophet, note: :e1, release: 8, cutoff: 70
synth :prophet, note: :e1 + 4, release: 8, cutoff: 80
end
Ahora, juega tú mismo con diferentes duraciones de phase:
. Prueba con valores más largos y más cortos. Mira lo que ocurre cuando eliges un valor realmente corto. Prueba también con diferentes sintetizadores como :beep
o :dsaw
y diferentes notas. Echa un vistazo al siguiente diagrama para ver cómo los diferentes valores de phase:
cambian el número de cambios de amplitud por compás.
Duración
La duración de fase (phase duration) es la longitud de tiempo para un ciclo de encendido/apagado del volumen. Por tanto, valores más bajos harán al efecto cambiar entre encendido y apagado mucho más rápido que valores más altos. Puedes empezar jugando con valores como 0.125
, 0.25
, 0.5
y 1
.
Por defecto, el efecto :slicer
utiliza una onda cuadrada para manipular la amplitud a lo largo del tiempo. Por eso escuchamos la amplitud encendida durante un periodo de tiempo, luego inmediatamente apagada por otro periodo, y encendida de nuevo. Podemos ver que la onda cuadrada sólo es una de las 4 ondas de control distintas que permite usar :slicer
. Las otras son la onda de sierra, la onda triangular la onda de (co)seno. Échale un vistazo al diagrama de arriba para ver qué forma tienen estas ondas. También podemos escuchar cómo suenan. Por ejemplo, el siguiente código utiliza el (co)seno como onda de control. Escucha cómo el sonido no se enciende y apaga de forma abrupta, sino que aparece y desaparece gradualmente:
with_fx :slicer, phase: 0.5, wave: 3 do
synth :dsaw, note: :e3, release: 8, cutoff: 120
synth :dsaw, note: :e2, release: 8, cutoff: 100
end
Juega con las siguientes formas de onda cambiando la opción wave:
a 0
para onda de sierra, 1
para onda cuadrada, 2
para onda triangular, y 3
para onda de seno. Prueba también cómo suenan ondas distintas con valores de phase:
distintos.
Cada una de estas ondas se pueden invertir con la opción invert_wave:
, que les da la vuelta en torno al eje y. Por ejemplo, en una misma fase, una onda cuadrada suele empezar alto y va bajando gradualmente antes de volver a subir. Con invert_wave:1
, la onda empieza bajo y va subiendo gradualmente antes de volver a bajar. Además, la onda de control puede empezar en puntos distintos con la opción phase_offset:
, que debería tener un valor entre 0
y 1
. Jugando con las opciones phase:
, wave:
, invert_wave:
y phase_offset
puedes cambiar drásticamente cómo se modifica la amplitud a lo largo del tiempo.
Duración
Por defecto, :slicer
cambia entre los valores de amplitud 1
(totalmente alto) y 0
(silenciado). Esto se puede cambiar con las opciones amp_min:
y amp_max
. Puedes usarlas con la onda de seno, creando un efecto de tremolo muy sencillo:
with_fx :slicer, amp_min: 0.25, amp_max: 0.75, wave: 3, phase: 0.25 do
synth :saw, release: 8
end
Es como si cogieses la rueda de volumen en tu altavoz y lo movieses arriba y abajo ligeramente, con lo que el sonido ‘tiembla’.
Una de las potentes características de :slicer
es su capacidad de utilizar la probabilidad para elegir si se activa o desactiva el slicer. Antes de que el :slicer
FX comience una nueva fase, lanza un dado y, en función del resultado, utiliza la onda de control seleccionada o mantiene la amplitud desactivada. Vamos a escucharlo:
with_fx :slicer, phase: 0.125, probability: 0.6 do
synth :tb303, note: :e1, cutoff_attack: 8, release: 8
synth :tb303, note: :e2, cutoff_attack: 4, release: 8
synth :tb303, note: :e3, cutoff_attack: 2, release: 8
end
Escucha el interesante ritmo de pulsos que hemos conseguido. Prueba a cambiar la opción probability:
(probabilidad) a un valor distinto entre 0
y 1
. Valores más cercanos a 0
generarán más espacio entre cada sonido, porque la probabilidad de que el sonido se dispare es mucho menor.
Otra cosa que hay que notar es que el sistema de probabilidad en el FX es igual que el sistema de aleatoriedad accesible a través de fns como rand
y shuffle
. Ambos son completamente deterministas. Esto significa que cada vez que pulses Run escucharás exactamente el mismo ritmo de pulsos para una probabilidad determinada. Si quieres cambiar las cosas, puedes usar la opción seed:
para seleccionar una semilla diferente. Esto funciona exactamente igual que use_random_seed
pero sólo afecta a ese FX en particular.
Finalmente, puedes probar a cambiar la posición de ‘reposo’ de la onda de control cuando los tests de probabilidad fallen de 0
a cualquier otra posición, con la opción prob_pos:
:
with_fx :slicer, phase: 0.125, probability: 0.6, prob_pos: 1 do
synth :tb303, note: :e1, cutoff_attack: 8, release: 8
synth :tb303, note: :e2, cutoff_attack: 4, release: 8
synth :tb303, note: :e3, cutoff_attack: 2, release: 8
end
Algo muy divertido que puedes probar es usar el :slicer
para cortar un beat de batería:
with_fx :slicer, phase: 0.125 do
sample :loop_mika
end
Esto nos permite coger cualquier sample y crear nuevas posibilidades rítmicas, lo cual es súper divertido. Sin embargo, debes tener cuidado y asegurarte de que el tempo del sample coincida con el BPM actual de Sonic Pi; de lo contrario, el slicing sonará fatal. Por ejemplo, prueba a cambiar el :loop_mika
con el sample loop_amen
y escucha cómo de mal puede llegar a sonar cuando los tempos no están alineados.
Como ya hemos visto, cambiar el BPM por defecto con use_bpm
alarga o comprime los tiempos de silencio y duraciones de envolventes de sintetizadores para que el tempo coincida. El efecto :slicer
también necesita esto, ya que la opción phase:
se mide en beats, en vez de segundos. Por tanto, podemos arreglar el problema que tiene loop_amen
arriba, cambiando el BPM para que coincida con el del sample:
use_sample_bpm :loop_amen
with_fx :slicer, phase: 0.125 do
sample :loop_amen
end
Vamos a aplicar todas estas ideas en un ejemplo final que, usando el efecto :slicer
, crea una combinación muy interesante. Adelante, empieza a cambiarlo y ¡conviértelo en tu propia pieza!
live_loop :dark_mist do
co = (line 70, 130, steps: 8).tick
with_fx :slicer, probability: 0.7, prob_pos: 1 do
synth :prophet, note: :e1, release: 8, cutoff: co
end
with_fx :slicer, phase: [0.125, 0.25].choose do
sample :guit_em9, rate: 0.5
end
sleep 8
end
live_loop :crashing_waves do
with_fx :slicer, wave: 0, phase: 0.25 do
sample :loop_mika, rate: 0.5
end
sleep 16
end