Jusqu’à maintenant nous avons passé beaucoup de temps à rechercher les différents sons que vous pouvez faire avec des blocs de play
et de sample
. Nous avons aussi appris comment déclencher ces sons dans le temps en utilisant sleep
.
Comme vous vous en êtes probablement rendu compte, on peut prendre beaucoup de plaisir avec la construction de ces blocs de base. Toutefois, une dimension totalement nouvelle de plaisir se découvre quand on commence à utiliser la puissance du code pour structurer sa musique et ses compositions. Dans les quelques sections suivantes, nous allons explorer quelques uns de ces nouveaux outils puissants. En premier, découvrons l’itération et les boucles.
Avez-vous écrit du code que vous aimeriez répéter quelques fois ? Par exemple, vous pourriez avoir quelque chose comme ceci :
play 50
sleep 0.5
sample :elec_blup
sleep 0.5
play 62
sleep 0.25
Et si nous voulons répéter ceci 3 fois ? Eh bien, nous pourrions faire simple et juste le copier et le coller trois fois :
play 50
sleep 0.5
sample :elec_blup
sleep 0.5
play 62
sleep 0.25
play 50
sleep 0.5
sample :elec_blup
sleep 0.5
play 62
sleep 0.25
play 50
sleep 0.5
sample :elec_blup
sleep 0.5
play 62
sleep 0.25
Maintenant, ça fait beaucoup de code ! Que se passe-t-il si nous voulions changer l’échantillon en :elec_plip
? Vous aller devoir trouver tous les endroits avec l’original :elec_blup
et les modifier un par un. De façon plus importante, que faire si vous voulez répéter le bout de code original 50 fois ou 1000 fois ? Ça ferait alors vraiment beaucoup de code, et beaucoup de lignes de code à modifier si vous vouliez faire un changement.
En fait, répéter le code devrait être aussi facile que de dire fais ceci trois fois. Eh bien, c’est presque cela. Souvenez-vous de notre vieil ami le bloc de code. Nous pouvons l’utiliser pour marquer le début et la fin du code que nous aimerions répéter trois fois. Nous utilisons alors le code spécial 3.times
. Ainsi, à la place d’écrire fais cela trois fois, nous écrivons 3.times do
- ce n’est pas trop dur. Rappelez-vous juste d’écrire end
à la fin du code que vous devez répéter :
3.times do
play 50
sleep 0.5
sample :elec_blup
sleep 0.5
play 62
sleep 0.25
end
Alors, est-ce que ce n’est pas plus propre que de copier-coller ! Nous pouvons l’utiliser pour créer beaucoup de chouettes structures répétitives :
4.times do
play 50
sleep 0.5
end
8.times do
play 55, release: 0.2
sleep 0.25
end
4.times do
play 50
sleep 0.5
end
Nous pouvons mettre des itérations à l’intérieur d’autres itérations pour créer des motifs intéressants. Par exemple :
4.times do
sample :drum_heavy_kick
2.times do
sample :elec_blip2, rate: 2
sleep 0.25
end
sample :elec_snare
4.times do
sample :drum_tom_mid_soft
sleep 0.125
end
end
Si vous voulez répéter quelque chose un grand nombre de fois, vous pourriez vous trouvez en situation d’utiliser des nombres vraiment grands comme 1000.times do
. Dans ce cas, vous feriez probablement mieux de demander à Sonic Pi de répéter à l’infini (au moins jusqu’à ce que vous pressiez le bouton stop !). Bouclons l’échantillon break amen à l’infini :
loop do
sample :loop_amen
sleep sample_duration :loop_amen
end
La chose importante à savoir à propos des boucles est qu’elles se comportent comme des trous noirs pour le code. Une fois que le code est entré dans une boucle, il ne peut pas en sortir tant que vous n’avez pas pressé stop - il va juste tourner en rond dans la boucle à jamais. Ce qui signifie que si vous avez du code après la boucle, vous ne l’entendrez jamais. Par exemple, la cymbale suivant cette boucle ne sera jamais jouée :
loop do
play 50
sleep 1
end
sample :drum_cymbal_open
Maintenant, structurez votre code avec des itérations et des boucles !