Créer un morceau

Ajouter du hasard

Bien ! Tu as un morceau qui tourne avec un rythme stable et une basse sur laquelle s’accroche la mélodie. Maintenant nous allons faire un truc vraiment cool et libérer le vrai potentiel de Sonic Pi. Programmons l’ordinateur pour qu’il compose pour nous !

Transposer la mélodie à l’aide d’un dé

Transposer signifie changer la hauteur des notes (vers l’aigu ou le grave). On peut aléatoirement transposer la mélodie ici et là pour ajouter du piment au morceau. Tu peux lancer un dé pour décider quand augmenter la hauteur de la mélodie. Voici un exemple :

live_loop :melodie do
  if one_in(6)
    use_transpose 2
  else
    use_transpose 0
  end
  play_pattern_timed [:c4, :e4, :f4, :g4, :f4, :e4, :f4, :g4, :f4, :e4, :f4], [0.25, 0.25, 0.25, 1.5, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25], attack: 0, release: 0.2
end

Créer une basse acid aléatoire

Faisons quelque chose d’intéressant avec la boucle de basse. .choose est un moyen d’extraire de façon aléatoire un élément d’une liste. Comme ceci :

play [:c, :e, :g].choose

[:c, :e, :g] est une liste de notes (en fait les notes de l’accord de Do majeur). .choose extrait une de ces notes au hasard. Au lieu de notes tu peux avoir n’importe quoi dans la liste. Par exemple des valeurs de sleep :

loop do
  use_octave [0, 1].choose
  play [:c, :e, :g].choose
  sleep [0.25, 0.25, 0.5, 1].choose
end

Tu n’as même pas besoin de retenir quelles notes sont dans quels accords. Sonic Pi peut s’occuper de ça pour toi. Au lieu de [:c, :e, :g], tu peux juste écrire (chord :C, :major). Ca crée automatiquement une liste des notes de l’accord de Do majeur. Voici un exemple :

loop do
  play (chord :c, :major).choose
  sleep [0.25, 0.25, 0.5, 1].choose
end

Utilisons cette sorcellerie pour avoir une ligne de basse bouillonnante. Sauvegarde ton travail et copie ta boucle :bass dans un autre buffer, au cas où tu voudrais la reprendre. Ensuite fais de la place pour notre nouvelle ligne de basse en supprimant le contenu de la boucle. Prenons le célèbre synthétiseur :tb303 et jouons au hasard des doubles-croches de l’accord majeur de do :

live_loop :basse do
  use_synth :tb303
  play (chord :C2, :major).choose
  sleep 0.25
end

Oups ! Pas vraiment des doubles-croches. Ajoute le paramètre , release: 0.125 à la fin de la commande play, comme ceci :

live_loop :basse do
  use_synth :tb303
  play (chord :C2, :major).choose, release: 0.125
  sleep 0.25
end

C’est mieux, mais il y a encore quelques finitions à faire. Jusqu’ici tu as utilisé les paramètres attack: et release: pour une instruction play. En fonction du synthétiseur que tu utilises, il y a beaucoup plus de paramètres à disposition. Par exemple le synthétiseur tb303 possède 45 options différentes à règler. Utilisons pour la basse un paramètre nommé cutoff. Cutoff supprime toutes les fréquences au-dessus d’un seuil. Tu peux utiliser des valeurs entre 0-130.

Mais n’utilise pas un seuil de cutoff fixe quand tu peux en avoir un au hasard ! Avec rrand(min, max) tu peux générer des nombres aléatoires dans un intervalle donné. Essaie ça :

live_loop :basse do
  use_synth :tb303
  play (chord :C2, :major).choose, release: 0.125, cutoff: rrand(60, 110)
  sleep 0.25
end

Super ! N’oublie pas d’explorer et d’essayer différentes choses. Pour récapituler, voici un exemple de ce que tu peux avoir maintenant :

use_bpm 120

live_loop :batterie do
  sample :drum_heavy_kick
  sleep 1
  sample :drum_snare_hard
  sleep 1
  sample :drum_heavy_kick
  sleep 1
  sample :drum_snare_hard
  sleep 1
end

live_loop :charleston do
  sample :drum_cymbal_closed
  sleep 0.25
  sample :drum_cymbal_pedal
  sleep 1
end

live_loop :basse do
  use_synth :tb303
  play (chord :C2, :major).choose, release: 0.125, cutoff: rrand(60, 110)
  sleep 0.25
end


live_loop :melodie do
  if one_in(6)
    use_transpose 2
  else
    use_transpose 0
  end
  play_pattern_timed [:c4, :e4, :f4, :g4, :f4, :e4, :f4, :g4, :f4, :e4, :f4], [0.25, 0.25, 0.25, 1.5, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25], attack: 0, release: 0.2
end