Hacer una canción

Añade aleatorización

¡Genial! Conseguiste que tu canción vaya bien con un ritmo estable y un bajo enganchado encima de la melodía. Ahora vamos a hacer algo muy guay y desataremos el verdadero potencial de Sonic Pi. Vamos a añadir algunos elementos generativos a la pista y a programar la computadora para que lo componga por nosotros.

Tirar un dado y transportar la melodía

Transportar significar mover el tono hacia arriba o hacia abajo. Podemos transportar aleatoriamente la melodía de vez en cuando y luego añadir algún condimento a la pista. Puedes tirar un dado para decidir cuando cambiar el tono de la melodía. Un ejemplo:

live_loop :melody do
  if one_in(6)
    use_transpose 2
  else
    use_transpose 0
  end
  play_pattern_timed [:c4, :e4, :f4, :g4, :f4, :e4, :f4, :g4, :f4, :e4, :f4], [0.25, 0.25, 0.25, 1.5, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25], attack: 0, release: 0.2
end

Crea una pista aleatoria acid bass

Vamos a hacer algo interesante para el bucle de bajos. .choose es un método práctico que aleatoriamente escoge un elemento de una lista. Como esta:

play [:c, :e, :g].choose

[:c, :e, :g] son una lista de notas (en este caso las notas del acorde de Do mayor). .choose elige una de estas notas al azar. En lugar de notas puedes escribir cualquier cosa en la lista. Como tiempos de silencio por ejemplo:

loop do
  use_octave [0, 1].choose
  play [:c, :e, :g].choose
  sleep [0.25, 0.25, 0.5, 1].choose
end

No tienes incluso que recordar que notas están en un acorde. Sonic Pi puede hacer eso por ti. En lugar de escribir [:c, :e, :g], simplemente escribe (chord :C, :major). Eso crea una lista automática para ti con las notas correctas. Por ejemplo:

loop do
  play (chord :c, :major).choose
  sleep [0.25, 0.25, 0.5, 1].choose
end

Usa esta hechicería para una pista de bajo tipo bubbling (burbujeante). Guarda tu trabajo y copia tu bucle :bass en curso en otro buffer, por si quieres volver a él. Luego haz sitio para nuestra nueva pista de bajo y elimina el contenido del bucle. Vamos a usar el sintetizador clásico :tb303 y tocaremos notas de semicorchea del acorde de Do mayor:

live_loop :bass do
  use_synth :tb303
  play (chord :C2, :major).choose
  sleep 0.25
end

¡Oh! No está del todo bien. Añade el parámetro release: 0.125 al final del comando play, así:

live_loop :bass do
  use_synth :tb303
  play (chord :C2, :major).choose, release: 0.125
  sleep 0.25
end

Así está mejor, pero todavía se puede pulir algo más. Hasta ahora has usado los parámetros attack: y release: para el comando play. Dependiendo del sintetizador que estés usando, hay un muchos más parámetros para usar.

Por ejemplo el sintetizador tb303 tiene 45 opciones diferentes de retoque. Vamos a usar el parámetro llamado cutoff para los bajos. Cutoff elimina todas las frecuencias por encima de la frecuencia de cutoff. Puedes usar valores entre 0-130.

Pero no uses solo un determinado valor de cutoff, ¡puedes tener un valor aleatorio! Con rrand(min, max) puedes generar números aleatorios en un rango dado. Pruébalo:

live_loop :bass do
  use_synth :tb303
  play (chord :C2, :major).choose, release: 0.125, cutoff: rrand(60, 110)
  sleep 0.25
end

¡Bieeen! Recuerda investigar y probar cosas diferentes. Como repaso, aquí tenemos un ejemplo sobre lo que puedes ya haber probado a estas alturas:

use_bpm 120

live_loop :drums do
  sample :drum_heavy_kick
  sleep 1
  sample :drum_snare_hard
  sleep 1
  sample :drum_heavy_kick
  sleep 1
  sample :drum_snare_hard
  sleep 1
end

live_loop :hihat do
  sample :drum_cymbal_closed
  sleep 0.25
  sample :drum_cymbal_pedal
  sleep 1
end

live_loop :bass do
  use_synth :tb303
  play (chord :C2, :major).choose, release: 0.125, cutoff: rrand(60, 110)
  sleep 0.25
end


live_loop :melody do
  if one_in(6)
    use_transpose 2
  else
    use_transpose 0
  end
  play_pattern_timed [:c4, :e4, :f4, :g4, :f4, :e4, :f4, :g4, :f4, :e4, :f4], [0.25, 0.25, 0.25, 1.5, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25], attack: 0, release: 0.2
end