Contrôler votre son

Jusqu’ici dans cette série nous nous sommes concentrés sur le déclenchement de sons. Nous avons découvert qu’on pouvait déclencher les nombreux synthés présents dans Sonic Pi avec play ou synth et comment déclencher des samples pré-enregistrés avec sample. Nous avons aussi vu comment on pouvait entourer ces sons dans des effets studio tels que la reverb et la distorsion en utilisant la commande with_fx. En combinant cela avec le système de chronométrage incroyablement précis de Sonic Pi on peut produire un vaste ensemble de sons, rythmes et mélodies. Cependant, une fois qu’on a soigneusement sélectionné les options d’un son en particulier et qu’on l’a déclenché, on ne peut plus le modifier pendant qu’il est joué, c’est ça ? Non ! Aujourd’hui vous allez apprendre quelque chose de très puissant : comment contrôler des synthés qui sont en train d’être joués.

Un son de base

Créons un simple son agréable. Lancez Sonic Pi et tapez le code suivant dans un buffer disponible :

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

Maintenant cliquez sur le bouton ‘Run’ en haut à gauche pour entendre un beau son de synthé grondant. Allez-y, cliquez à nouveau dessus quelques fois pour vous habituer. OK, fini ? Commençons à le contrôler !

Nœuds de synthé

Une fonctionnalité peu connue de Sonic Pi est que les fonctions play, synth et sample retournent ce qu’on appelle un SynthNode qui représente un son en train d’être joué. Vous pouvez capturer un de ces SynthNodes en utilisant une variable standard et le contrôler ensuite dans le futur. Par exemple, changeons la valeur de l’option cutoff: après un battement :

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

Regardons chaque ligne une par une :

On commence par déclencher le synthé :prophet en utilisant la fonction synth habituelle. Cependant on capture aussi le résultat dans une variable nommée sn. On aurait pu appeler cette variable complètement différemment comme par exemple synth_node ou jane : le nom n’a pas d’importance. Enfin il est important de choisir un nom qui a du sens pour vous pour vos performances et pour les gens qui lisent votre code. J’ai choisi sn parce que c’est un bon petit moyen mnémotechnique pour ‘synth node’.

A la ligne 2 on a une commande sleep standard. Ca ne fait rien de spécial : ça demande juste à l’ordinateur d’attendre un battement, un temps, avant de passer à la ligne suivante.

C’est à la ligne 3 qu’on commence à s’amuser. Ici on utilise la fonction control pour dire à notre SynthNode courant de changer la valeur de coupure en 130. Si vous cliquez sur le bouton ‘Run’, vous entendrez le synthé :prophet commencer à jouer comme avant, mais après un battement il changera et sonnera beaucoup plus clair.

Options modulables

La plupart des options des synthés et des effets inclus dans Sonic Pi peuvent être modifiés après avoir été déclenchés. Cependant, ce n’est pas le cas pour tous. Par exemple, les options d’enveloppe attack:, decay:, sustain: et release: ne peuvent être définies que quand on déclenche le synthé. Pour savoir quelles options peuvent être modifiées ou non, c’est simple : allez voir la documentation d’un synthé ou effet et regardez la documentation des options individuelles et cherchez les phrases “May be changed whilst playing” (Peut être modifiée en jouant) ou “Can not be changed once set” (ne peut pas être modifiée une fois définie). Par exemple, la documentation de l’option attack: du synthé :beep indique clairement qu’on ne peut pas la modifier ultérieurement :

Modifications multiples

Pendant qu’un synthé est joué vous n’êtes pas limité à ne le changer qu’une fois : vous êtes libre de le modifier autant que vous le souhaitez. Par exemple, on peut transformer notre :prophet en petit arpégiateur avec le code suivant :

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

Dans cet extrait de code, nous avons juste ajouté des petites choses en plus. On commence par définir une nouvelle variable appelée notes qui contient les notes qu’on aimerait parcourir en boucle (un arpégiateur est juste un mot savant pour quelque chose qui parcourt en boucle une liste de notes dans un ordre donné). Ensuite on déplace notre appel à control dans une itération en l’appelant 16 fois. A chaque appel à control, on parcourt notre anneau de notes qui va se répéter automatiquement quand on arrivera à sa fin (grâce à la puissance fabuleuse des anneaux de Sonic Pi). Pour varier un peu, essayez de remplacer .tick par .choose et tentez d’entendre la différence.

Notez qu’on peut modifier plusieurs options en même temps. Essayez de changer la ligne de contrôle en la suivante et écoutez la différence :

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

Transitions

Quand on contrôle un SynthNode, il répond exactement à ce moment-là et change immédiatement la valeur de l’option comme si vous aviez pressé un bouton ou actionné un interrupteur pour demander la modification. Cela peut sonner rythmique et percussif, notamment si l’option contrôle un aspect du timbre comme cutoff:. Cependant, on n’a pas toujours envie que la modification arrive immédiatement. On a parfois envie de se déplacer en douceur de la valeur courante à la nouvelle, comme si on avait déplacé un curseur. Bien sûr, Sonic Pi sait aussi faire cela en utilisant les options _slide:.

Chaque option qui peut être modifiée a aussi une option spéciale correspondante _slide: qui vous permet de définir un temps de transition. Par exemple, amp: a amp_slide: et cutoff: a cutoff_slide:. Ces options de transition marchent un peu différemment de toutes les autres options parce qu’elles disent à la note de synthé comment se comporter la prochaine fois qu’elle seront contrôlées. Voyons ça :

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

Remarquez que cet exemple est exactement le même qu’avant sauf qu’on a ajouté cutoff_slide:. Ceci indique que la prochaine fois que l’option cutoff: de ce synthé sera contrôlée, il mettra deux battements pour passer de sa valeur courante à la nouvelle valeur. Par conséquent, quand on utilise control vous pouvez entendre la coupure changer graduellement de 70 à 130. Cela crée une sensation dynamique intéressante pour le son. Maintenant essayez de changer la durée de cutoff_slide: en une valeur plus courte comme 0.5 ou une valeur plus longue comme 4 pour voir comment ça change le son. Souvenez-vous que vous pouvez effectuer une transition pour chacune des options modifiables de cette même manière, et chaque valeur de _slide: peut être complètement différente donc vous pouvez avoir une transition lente de la coupure, une transition rapide de l’amplitude, et une transition de la stéréo un peu entre les deux si c’est ce que vous avez envie de créer.

Rassemblons tout

Regardons un court exemple qui montre la puissance du contrôle des synthés après leur déclenchement. Remarquez que vous pouvez aussi effectuer des transitions sur les effets, comme vous l’avez fait avec les synthés mais avec une syntaxe légèrement différente. Regardez la section 7.2 du tutoriel inclus dans Sonic Pi pour plus d’informations sur le contrôle des effets.

Copiez le code dans un tampon de libre et écoutez. Ne vous arrêtez pas là : jouez à modifier le code. Changez les durées de transition, changez les notes, le synthé, l’effet et les durées d’attente et voyez si vous pouvez le transformer en quelque chose de complètement différent !

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