Controlando tu sonido

Hasta ahora en esta serie, nos hemos centrado en usar sonidos disparándolos. Hemos descubierto que podemos disparar los distintos sintetizadores de Sonic Pi con play o synth, y hemos aprendido cómo lanzar samples pregrabados con sample. También hemos visto cómo podemos pasar estos sonidos por efectos de estudio, como reverberación y distorsión, usando el comando with_fx. Combina esto con el sistema de tiempo increíblemente preciso de Sonic Pi, y puedes producir una cantidad enorme de sonidos, beats y riffs. Sin embargo, una vez has seleccionado las opciones de un sonido y lo has disparado, no hay forma de cambiar dichas opciones mientras suena, ¿verdad? ¡Pues no! Hoy vas a aprender algo muy potente: cómo controlar sintetizadores en ejecución.

Un sonido básico

Hagamos un sonido simple. Arranca Sonic Pi y en un buffer libre escribe lo siguiente:

synth :prophet, note: :e1, release: 8, cutoff: 100

Ahora pulsa el botón de Ejecutar (arriba a la izquierda) para escuchar un adorable y estruendoso sintetizador. No pares, ejecútalo varias veces para que tengas una primera impresión. Vale, ¿lo tienes? Entonces, ¡vamos a empezar a controlarlo!

Synth Nodes

Una funcionalidad poco conocida de Sonic Pi es que las funciones play, synth y sample devuelven algo llamado SynthNode (nodo de sintetizador), que representa un sonido en ejecución. Puedes capturar un SynthNode usando una variable normal y corriente, y luego controlarlo más tarde. Por ejemplo, vamos a cambiar la opción cutoff: después de 1 beat:

sn = synth :prophet, note: :e1, release: 8, cutoff: 100
sleep 1
control sn, cutoff: 130

Veamos cada línea una por una:

En primer lugar tenemos el sintetizador :prophet que usa la función synth como de costumbre. Sin embargo, hemos capturado el resultado en una variable llamada sn. Podríamos haber llamado a esta variable de cualquier forma, como synth_node o jane - el nombre no importa. Lo que sí es importante es escoger un nombre que tenga sentido para ti cuando des tu concierto, o para otras personas que quieran leer tu código. Yo he usado sn porque es una abreviatura de synth node.

En la línea 2 hemos usado un comando sleep normal y corriente. Esto no hace nada especial; sencillamente, le pide al ordenador que espere 1 beat antes de moverse a la siguiente línea.

En la línea 3 empieza la diversión con el tema del control. Aquí hemos usado la función control para decirle a nuestro SynthNode en ejecución que cambie su valor de cutoff a 130. Si le das al botón de Ejecutar, escucharás el sintetizador que empieza a tocar como antes, pero después de 1 beat verás que cambia a un sonido mucho más brillante.

Opciones Modulables

La mayoría de las opciones para sintetizadores y efectos de Sonic Pi se pueden cambiar después de haber sido disparadas. Sin embargo, esto no pasa con todas. Por ejemplo, las opciones de envolvente en attack:, decay:, sustain: y release: sólo se pueden controlar cuando disparas el sintetizador. Es fácil saber qué opts puedes cambiar y cuáles no puedes cambiar; busca el sintetizador o efecto que quieras en la documentación, baja hasta la documentación de las opts, y busca las frases “Puede ser cambiado mientras se toca” o “No se puede cambiar una vez iniciado”. Por ejemplo, la documentación para la opción attack: del sintetizador :beep nos deja claro que no se puede cambiar esa opción después de disparar el sintetizador:

Cambios múltiples

Mientras un sintetizador está en ejecución, no estás limitado a cambiarlo sólo una vez: puedes cambiarlo tantas veces como quieras. Por ejemplo, podemos convertir nuestro :prophet en un mini arpegiador con el siguiente código:

notes = (scale :e3, :minor_pentatonic)
sn = synth :prophet, note: :e1, release: 8, cutoff: 100
sleep 1
16.times do
  control sn, note: notes.tick
  sleep 0.125
end

Hemos añadido unas cosillas extra en este fragmento de código. Primero, hemos definido una nueva variable llamada notes que contiene las notas por las que nos gustaría pasar (por cierto, arpegiador sólo es un palabrejo para algo que da vueltas sobre una lista de notas en orden). Segundo, hemos reemplazado nuestra llamada a control por una iteración que la llama 16 veces. En cada llamada a control, hacemos .tick sobre nuestro anillo de notas (notes), que se repite automáticamente cuando llegamos al final (gracias al fabuloso poder de los anillos de Sonic Pi). Para tener algo más de variedad, prueba a reemplazar .tick por .choose, a ver si puedes escuchar la diferencia.

Fíjate en que podemos cambiar varios opts a la vez. Prueba a cambiar la línea de control por la siguiente, y escucha la diferencia:

control sn, note: notes.tick, cutoff: rrand(70, 130)

Sliding

Cuando controlamos un SynthNode, éste responde exactamente a tiempo y cambia al instante el valor del opt por uno nuevo, como si hubieras presionado un botón o hubieras accionado un interruptor. Esto puede sonar rítmico y percusivo - especialmente si el opt controla un aspecto del timbre, como cutoff:. Sin embargo, a veces no quieres que el cambio sea instantáneo. Tal vez quieras moverte suavemente del valor actual al nuevo, como si estuvieras moviendo un deslizador o un dial. Por supuesto, Sonic Pi también puede hacer esto, usando los opts _slide:.

Cada opción que puede ser modificada también tiene una opción _slide: correspondiente, que permite especificar el tiempo de deslizamiento (slide). Por ejemplo, amp: tiene amp_slide:, y cutoff: tiene cutoff_slide:. Estas slide opts son muy distintas al resto de opts, ya que le dicen a la nota del sintetizador cómo comportarse la siguiente vez que sean controladas. Vamos a echarle un vistazo:

sn = synth :prophet, note: :e1, release: 8, cutoff: 70, cutoff_slide: 2
sleep 1
control sn, cutoff: 130

Fíjate en que este ejemplo es exactamente igual que el de antes, excepto por el cutoff_slide:. Esto le dice al sintetizador que, para la próxima vez que controle su opción cutoff:, tiene que usar 2 beats para deslizarse desde el valor actual hasta el nuevo valor. Por eso puedes escuchar el cutoff moverse de 70 a 130 cuando usas control. Esto le da al sonido un toque dinámico muy interesante. Ahoa prueba a cambiar el tiempo de cutoff_slide: a un valor más corto, como 0.5, o un valor más largo, como 4, para ver cómo cambia el sonido. Recuerda, puedes hacer slide entre cualquiera de las opciones modificables de esta forma, y cada valor de _slide: puede ser totalmente distinto. Puedes hacer que el cutoff cambie lentamente, que el amp cambie rápido y que el pan cambie a un ritmo intermedio; configúralo a tu gusto, como estés pensando para tu nueva creación…

Juntándolo todo

Veamos un breve ejemplo que demuestra el poder de controlar sintetizadores después de haberlos disparado. Fíjate en que también puedes hacer slide con los efectos igual que con los sintetizadores, aunque con una sintaxis ligeramente distinta. Mira la sección 7.2 del tutorial incluido en Sonic Pi para más información sobre el control de los FX (efectos).

Copia el código en un búfer separado y escúchalo unos instantes. No dejes que se acabe ahí: juega con el código. Cambia los tiempos de slide, cambia las notas, el sintetizador, los FX y los tiempos de pausa, ¡a ver si puedes convertirlo en algo totalmente distinto!

live_loop :moon_rise do
  with_fx :echo, mix: 0, mix_slide: 8 do |fx|
    control fx, mix: 1
    notes = (scale :e3, :minor_pentatonic, num_octaves: 2).shuffle
    sn = synth :prophet , sustain: 8, note: :e1, cutoff: 70, cutoff_slide: 8
    control sn, cutoff: 130
    sleep 2
    32.times do
      control sn, note: notes.tick, pan: rrand(-1, 1)
      sleep 0.125
    end
  end
end