Les rayons lasers perçaient à travers les bouffées de fumée et les baffles transmettaient des basses profondes dans les corps de la foule. L’atmosphère était remplie d’un mélange de synthés et de danse. Il y avait pourtant quelque chose d’étrange dans cette boîte de nuit. Du texte futuriste était projeté au dessus de la cabine du DJ, bougeant, dansant, clignotant. Ce n’étaient pas de belles visualisations, c’était juste une projection de Sonic Pi tournant sur un Raspberry Pi. La personne dans la cabine de DJ n’était pas en train de tourner des disques, elle écrivait, éditait et évaluait du code. En direct. C’est ça le Live Coding.
Cela peut sonner comme une histoire tirée par les cheveux dans une boîte de nuit futuriste mais coder de la musique comme cela est une tendance qui se développe et qu’on appelle souvent Live Coding (programmation interactive) (http://toplap.org). Une des directions récentes que cette approche de la musique a prise est l’Algorave (http://algorave.com) : des événements où des artistes comme moi codent de la musique pour que les gens dansent. Cependant vous n’avez pas besoin d’une boîte de nuit pour coder en live : avec Sonic Pi version 2.6 et plus vous pouvez le faire dans n’importe quel endroit où vous pouvez prendre votre Raspberry Pi et un casque ou des haut-parleurs. Quand vous aurez atteint la fin de cet article, vous saurez programmez vos rythmes et les modifier en direct. Où vous irez ensuite ne sera limité que par votre imagination.
La clef de la programmation interactive avec Sonic Pi est la maîtrise de la live_loop
. En voici une :
live_loop :beats do
sample :bd_haus
sleep 0.5
end
Il y a quatre ingrédients principaux dans une live_loop
. Le premier est son nom. Notre live_loop
s’appelle ici :beats
. Vous pouvez donner le nom que vous voulez à votre live_loop
. Défoulez-vous. Soyez créatifs. J’utilise souvent des noms qui communiquent à l’audience qu’est-ce que la musique va faire. Le deuxième ingrédient est le mot do
qui marque où la live_loop
commence. Le troisième est le mot end
qui marque où la live_loop
finit, et enfin il y a le corps de la live_loop
qui décrit ce que la boucle va répéter : c’est la partie entre do
et end
. Dans ce cas on joue en boucle un sample de tambour basse et on attend un demi temps. Cela produit un beau rythme régulier de basse. Allez, copiez-le dans un buffer vide de Sonic Pi et cliquez sur ‘Run’. Boum, boum, boum !.
OK, qu’est-ce qu’elle a de si spécial, cette live_loop
? Jusqu’ici, on dirait que c’est juste une boucle idéalisée ! Eh bien, la beauté des live_loop
, c’est qu’on peut les redéfinir à la volée. Ceci signifie que, pendant qu’elles sont en train de tourner, on peut changer ce qu’elles font. C’est le secret de la programmation interactive avec Sonic Pi. Essayons :
live_loop :choral_drone do
sample :ambi_choir, rate: 0.4
sleep 1
end
Maintenant cliquez le bouton ‘Run’ ou tapez ‘alt-r’. Vous entendez maintenant de beaux sons de chœurs . Ensuite, alors qu’il est encore en train de jouer, changez la fréquence de 0.4
en 0.38
. Cliquez à nouveau sur ‘Run’. Whaou ! Vous avez entendu le chœur changer de note ? Ecrivez à nouveau 0.4
pour revenir comme avant. Puis 0.2
, puis 0.19
, puis à nouveau 0.4
. Voyez-vous que juste en changeant un paramètre à la volée permet de contrôler la musique ? Maintenant jouez vous-même avec la fréquence, choisissez vos propres valeurs. Essayez des nombres négatifs, de très petits nombres et de grands nombres. Amusez-vous !
Une des leçons les plus importantes avec les live_loop
, c’est qu’elles ont besoin de se reposer. Prenons par exemple cette live_loop
:
live_loop :infinite_impossibilities do
sample :ambi_choir
end
Si vous essayez d’exécuter ce code, vous verrez immédiatement que Sonic Pi se plaint que la live_loop
n’a pas dormi. C’est un mécanisme de sécurité qui se met en place. Prenons un moment pour penser à ce que ce code demande à l’ordinateur de faire. C’est cela, on demande à l’ordinateur de jouer un nombre infini de samples de chorale dans un temps nul. Sans le mécanisme de sécurité le pauvre ordinateur essaierait de faire ça et exploserait. Souvenez-vous en bien : vos live_loop
s doivent contenir un appel à sleep
.
La musique est pleine de choses qui arrivent en même temps. La batterie en même temps que la basse, en même temps que du chant, en même temps que des guitares… En informatique on appelle ça la concurrence et Sonic Pi nous donne une manière étonnamment simple de jouer des choses en même temps. Il suffit d’utiliser plus qu’une live_loop
!
live_loop :beats do
sample :bd_tek
with_fx :echo, phase: 0.125, mix: 0.4 do
sample :drum_cymbal_soft, sustain: 0, release: 0.1
sleep 0.5
end
end
live_loop :bass do
use_synth :tb303
synth :tb303, note: :e1, release: 4, cutoff: 120, cutoff_attack: 1
sleep 4
end
Ici nous avons deux live_loop
s, une qui tourne rapidement pour faire un rythme, et une autre qui boucle lentement pour faire un son de basse de fou.
Une des choses intéressantes quand on utilise plusieurs live_loop
, c’est que chacune gère son propre temps. Cela signifie qu’il est très facile de créer des structures polyrythmiques intéressantes et même de jouer avec la phase, style Steve Reich. Par exemple :
# La phase de piano de Steve Reich
notes = (ring :E4, :Fs4, :B4, :Cs5, :D5, :Fs4, :E4, :Cs5, :B4, :Fs4, :D5, :Cs5)
live_loop :slow do
play notes.tick, release: 0.1
sleep 0.3
end
live_loop :faster do
play notes.tick, release: 0.1
sleep 0.295
end
Dans chacun de ces tutoriels, nous finirons avec un exemple qui montre un nouveau morceau de musique qui utilise toutes les idées introduites. Lisez ce code et essayez d’imaginer ce qu’il fait. Ensuite, copiez-le dans un buffer frais de Sonic Pi et cliquez ‘Run’ pour entendre comment il sonne. Enfin changez un des nombres ou commentez / décommentez des parties. Voyez si vous pouvez prendre ça comme point de départ d’une nouvelle performance, et surtout amusez-vous ! A la prochaine…
with_fx :reverb, room: 1 do
live_loop :time do
synth :prophet, release: 8, note: :e1, cutoff: 90, amp: 3
sleep 8
end
end
live_loop :machine do
sample :loop_garzul, rate: 0.5, finish: 0.25
sample :loop_industrial, beat_stretch: 4, amp: 1
sleep 4
end
live_loop :kik do
sample :bd_haus, amp: 2
sleep 0.5
end
with_fx :echo do
live_loop :vortex do
# use_random_seed 800
notes = (scale :e3, :minor_pentatonic, num_octaves: 3)
16.times do
play notes.choose, release: 0.1, amp: 1.5
sleep 0.125
end
end
end