Fade in es la aparición gradual de una imagen, luz o sonido. En el caso de la música, nos referimos a ir aumentando gradualmente el volumen de un sonido o canción desde el silencio. Fade out es justamente lo contrario, partimos de un sonido y gradualmente bajamos el volumen hasta alcanzar el silencio.

Muy bien, ¿y ahora cómo lo programamos en Sonic Pi?

Una opción -seguro hay más- que he descubierto en este video es utilizar ramp y range para crear una sucesión creciente (o decreciente) de números que permanece en el último valor:

fade_in = (ramp *range(0, 1, 0.01))
fade_out = (ramp *range(1, 0, 0.01))

Vamos a ver cada elemento:

  • range crea una secuencia de valores en forma de anillo, esto es, que cuando la secuencia llega a su fin vuelve a iniciarse desde el primer valor. Hay que indicar un valor de inicio (starts), otro final (finish) y el tamaño del incremento (step_size).
range start (number), finish (number), step_size (number)

Es decir que, (range 0,1,0.1) es la sucesión de 0 a 1 que va incrementando su valor en 0,1 tal que:

0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9, … 0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9 …

Por supuesto, podemos hacerla decreciente, poniendo el número mayor como inicio y el menor como final. Por ejemplo, (range 1,0,0.1) es:

1,0.9,0.8,0.7,0.6,0.5,0.4,0.3,0.2,0.1,0, … 1,0.9,0.8,0.7,0.6,0.5,0.4,0.3,0.2,0.1,0 …

  • ramp fija el último valor de un vector, secuencia o anillo. Si tenemos el anillo (1,2,3) y aplicamos ramp, el resultado sería la secuencia 1,2,3,3,3,3,3,…

Usando range y ramp a la vez, conseguimos que la sucesión de números que genera range se detenga en el valor más alto, y así, el volumen se mantiene en el último valor.

Os dejo un par de ejemplos de fade in / fade out con un sample de bateria:

fade in

fade_in=(ramp *range(0,1,0.1))

live_loop :drum do
sample :bd_haus, amp: fade_in.tick
sleep 0.25
end

fade out

fade_out=(ramp *range(1,0,0.1))

live_loop :drum do
sample :bd_haus, amp: fade_out.tick
sleep 0.25
end
Anuncios