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.
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 !
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 SynthNode
s 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 :
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)
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.
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