Generar sonidos
¿Recuerdas chord
? La función chord te da las notas de un acorde concreto:
play (chord :c, :major).choose
# plays a random note of the C major chord (:c, :e or :g)
Hay también una función llamada scale
. Scale te da todas las notas de una escala, no sólo las notas del acorde:
play (scale :c, :major).choose
# plays a random note of the C major scale (:c, :d, :e, :f, :g, :a or :b)
Con choose
puedes obtener un elemento al azar de una lista. Si quieres ir a través de los valores de forma más estructurada, Sonic Pi tiene una función muy poderosa llamada tick
:
live_loop :arp do
play (scale :e3, :minor_pentatonic).tick, release: 0.1
sleep 0.125
end
Aquí, simplemente estamos agarrando la escala pentatónica de Mi menor (E3) y haciendo tic tac con cada elemento. Esto se hace añadiendo .tick
al final de la declaración de scale. Este tick solo tiene efecto local en el live loop, de forma que cada live loop puede tener su propio tic tac independiente:
live_loop :arp do
play (scale :e3, :minor_pentatonic).tick, release: 0.1
sleep 0.125
end
live_loop :arp2 do
use_synth :dsaw
play (scale :e2, :minor_pentatonic, num_octaves: 3).tick, release: 0.25
sleep 0.25
end
Puedes hacer tick sobre todo lo que es un anillo (bueno, puedes hacer tick sobre una lista también pero se terminará cuando llegues al final). Los anillos son listas especiales, que empiezan de nuevo cuando llegas al final. Como en el ejemplo anterior, la escala empezó de nuevo desde el principio cuando llegó a la última nota. Tanto scale
como chord
devuelven un anillo. A veces querrás crear una lista y convertirla en un anillo llamando a .ring
o usando el creador de anillos ring
:
puts [1, 2, 3, 4].ring #=> (ring 1, 2, 3, 4)
puts (ring 1, 2, 3, 4) #=> (ring 2, 2, 3, 4)
live_loop :arp do
play [:c, :e, :d, :f].ring.tick, release: 0.1
sleep 0.125
end
Aquí tenemos un ejemplo más complejo. Aquí tienes una lista o acordes que se convierten en un anillo a través de tick:
live_loop :keys do
use_synth :blade
play [(chord :Ab, :major7), (chord :Db, :major7), (chord :Bb, :minor7), (chord :Eb, '7')].ring.tick, attack: 0.1, release: 1
sleep 1
end
Y luego compleméntalo con una ‘melodía’ principal.
live_loop :keys do
use_synth :blade
play [(chord :Ab, :major7), (chord :Db, :major7), (chord :Bb, :minor7), (chord :Eb, "7")].ring.tick, attack: 0.1, release: 1
sleep 1
end
live_loop :lead do
use_synth :dsaw
play (scale :Ab, :major, num_octaves: 3).mirror.tick, attack: 0.05, release: 0.25, cutoff: rrand(80, 110), amp: 0.5
sleep 0.25
end
¡Empieza a hacer tick y enloquece!