Musique et Raspberry Pi : Sonic Pi !

Cet article tiré de la revue « The MagPi » est traduit de l’anglais par C&A, il est écrit par Samuel Aaron. Événement demain à l’université de Cambridge autour de Sonic Pi : http://www.junction.co.uk/artist/6812.
On ne présente plus le Raspberry Pi, cet ordinateur qui coûte – seulement – £24.35 de la taille d’une carte bleue, qui amène des perspectives pédagogiques incroyables.

Découvrez de nouveaux échantillons, synthés, effets de studio et Live Coding

Le code en direct

Les faisceaux laser tranchent les bouffées de fumée et les basses du subwoofer battent en profondeur dans les organes de la foule. L’atmosphère devient convenable avec un mélange grisant de synthés et de danse. Cependant quelque chose ne tournait pas rond dans cette discothèque. Des textes futuristes, en mouvement, dansants, clignotants étaient projetés dans des couleurs vives au-dessus du DJ. Ce n’étaient pas ces visuels les plus fous, il y avait également une projection d’un terminal avec Emacs (éditeur de texte NDLR). Les occupants de la cabine de DJ ne maniaient pas de disques, ils écrivaient, éditaient et évaluaient du code. Ce fut un concert de méta-EX (http://meta-ex.com). Le code est leur interface musicale et ils jouent en live.

Meta-eX, Sonic Pi, Cordes et ÂmesCoder ainsi la musique est une tendance croissante et est souvent décrite comme le « Live Coding » (http://toplap.org). L’une des orientations récentes de cette approche de la musique a été prise lors de la création d’Algorave (http://algorave.com) – événements où des artistes codent de la musique pour que les gens dansent.

Cependant, vous n’êtes pas obligés d’aller en discothèque pour « Live Coder ». Comme la moitié de Meta-eX et auteur de Sonic Pi, j’ai conçu la version 2 pour vous donner le pouvoir de « Live Coder » n’importe où vous pouvez prendre votre Raspberry Pi, une paire d’écouteurs, ou des haut-parleurs. Une fois que vous arriverez à la fin de cet article, vous saurez programmer vos propres « beats » et les modifier en direct. Là où vous irez ensuite sera uniquement limité par votre imagination.

Obtenir la v2.0 de Sonic Pi

Pour cet article, vous aurez besoin de la version 2.0 de Sonic Pi. Vous pouvez connaître votre version au démarrage de l’application sur l’écran. A ce stade de la version il ne reste plus que quelques étapes de développement. Vous pouvez obtenir une copie de la dernière « release candidate », ainsi que des instructions d’installation, à http://sonic-pi.net/. Lorsque la version 2.0 sera publiée (c’est le cas aujourd’hui NDLR), vous serez en mesure de mettre à jour avec :

sudo apt-get install sonic-pi

Vous serez alors en mesure d’ouvrir Sonic Pi en cliquant dans le menu principal, et regarder à l’intérieur du volet Education
-> Sonic Pi.

Quoi de neuf ?

Certains d’entre vous ont peut-être déjà expérimenté Sonic Pi. Nous espérons que vous avez tous eu beaucoup de plaisir à découvrir les différentes fonctionnalités. Vous pouvez utiliser toutes les compétences musicales de codage que vous avez appris avec la version 1 et les appliquer à la version 2. Pour ceux d’entre vous qui n’ont pas encore ouvert Sonic Pi, il est sans doute maintenant temps de faire un essai. Vous serez étonnés de tout ce que vous pourrez faire. Voici une liste rapide des nouvelles fonctionnalités majeures:

* Livré avec plus de 20 sons de synthé
* Possibilité de jouer n’importe quel fichier sample wav ou aiff
* Livré avec plus de 70 samples
* Timing extrêmement précis
* Prise en charge de plus de 10 effets studio: réverbération, écho, distorsion, etc.
* Prise en charge du Live Coding (codage en direct) : modification du code pendant son exécution

Jetons un coup d’œil à toutes ces caractéristiques.

Lecture d’une boucle de batterie

Codons une simple boucle de batterie. Nous pouvons utiliser « amen » pour nous aider à démarrer. Dans la fenêtre principale de l’éditeur de code de Sonic Pi, tapez la commande suivante et puis appuyez sur le bouton Exécuter:

sample :loop_amen

Boom ! Des tambours instantanément ! Allez-y, appuyez plusieurs fois. Amusez-vous. Je serai toujours là quand vous aurez fini.
Mais ce n’est pas tout. Nous pouvons jouer avec le temps de l’échantillon. Essayez ceci:

sample :loop_amen, rate: 0.5

Oooh, demi-vitesse. Allez-y, essayez de changer le taux.
Essayez des numéros inférieurs et supérieurs. Qu’advient-il si vous utilisez un nombre négatif ?
Que faire si nous voulions jouer la boucle plusieurs fois? Une façon de le faire consiste à appeler l’échantillon à de nombreuses reprises avec des moments d’arrêt entre deux samples :

sample :loop_amen
sleep 1.753
sample :loop_amen
sleep 1.753
sample :loop_amen

Toutefois, cela pourrait être un peu ennuyeux si vous voulez répéter cela 10 fois. Alors nous avons une meilleur façon de dire ça, avec le code suivant :

10.times do
 sample :loop_amen
 sleep 1.753
end

Bien sûr, nous pouvons changer le 10 par le nombre que nous voulons. Allez-y, essayez ! Que faire si nous voulons une boucle infinie? Nous notons simplement « loop » au lieu de « 10.time ». Aussi, je suis sûr que vous vous demandez ce que le magique 1.753 représente et comment je l’ai eu. Eh bien, il est la longueur de l’échantillon en secondes et je l’ai obtenu en demandant à Sonic-Pi:

puts sample_duration :loop_amen

Et il m’a répondu 1,753310657596372 – Je l’ai juste raccourci en 1,753 pour le rendre plus facile à taper. Maintenant, chose sympa, nous pouvons combiner ce code et ajouter une variable pour le plaisir.

sample_to_loop = :loop_amen
 sample_rate = 0.5
loop do
 sample sample_to_loop, rate :sample_rate
 sleep sample_duration sample_to_loop, rate:
 sample_rate
end

Maintenant, vous pouvez changer loop_amen: par l’un des autres samples (utiliser l’auto-complétion pour les découvrir). Changer le taux également. Amusez-vous!
Pour une liste complète des samples disponibles cliquez sur le bouton « Aide ».

Ajouter des effets

Une des caractéristiques les plus intéressantes dans la version 2.0 de Sonic Pi est le support des effets de studio tels que la réverbération, l’écho et la distorsion. Ils sont vraiment facile à utiliser. Par exemple, prenons le code échantillon de trigger qui suit:

sample :guit_e_fifths

Pour ajouter de la réverbération à cela, nous pouvons simplement ajouter un effet (fx) :

with_fx : reverb do
 sample : guit_e_fifths
end

Pour ajouter un peu de distorsion, nous pouvons ajouter :

with_fx : reverb do
    with_fx : disortion do
         sample : guit_e_fifths
    end
end

Tout comme les synthés et échantillons, FX prend également en charge les paramètres, de sorte que vous pouvez bricoler leurs variables :

with_fx :reverb, mix: 0.8 do
 with_fx :distortion, distort: 0.8 do
     sample :guit_e_fifths
 end
end

Bien sûr, vous pouvez placer des blocs FX autour de n’importe quel code. Par exemple, voici comment vous pourriez combiner le :ixi_techno FX et notre boucle de batterie :

with_fx :ixi _techno do
     loop do
         sample : loop_amen
         sleep sample_duration :loop_amen
     end
 end

Pour une liste complète des FX et leurs paramètres, cliquez sur le bouton « Aide ».

sonic piLive coder une boucle de synthé

Maintenant que nous avons maîtrisé les rudiments de déclenchement d’échantillons, d’arrêt et de bouclage, nous allons faire la même chose avec des synthés et puis sauter tête la première dans le territoire de Live Coding :

loop do
    use_synth :tb303
    play 30, attack: 0, release: 0.3
    sleep 0.5
end

Alors, que signifient les chiffres dans cet exemple?
Eh bien, vous pouvez arrêter la lecture, changer de numéro, puis lancez-le et voyez si vous pouvez entendre la différence. Cependant arrêter et démarrer devient rapidement assez ennuyeux. Rendons alors possible les modifications du code en temps réel de sorte que vous pouviez instantanément entendre les changements. Nous devons pour cela insérer dans notre code une fonction que l’on boucle :

define :play_my_synth do
     use_synth : tb303
         play 30, attack: 0, release: 0.3
     sleep 0. 5
end
loop do
 play_my_synth
end

Maintenant lorsque vous exécuterez ceci, cela sonnera exactement comme la simple boucle du dessous. Cependant, maintenant que nous avons donné un nom à notre code (dans ce cas, play_my_synth), nous pouvons changer la définition de notre code alors que les choses fonctionnent. Suivez ces étapes:
1. Écrivez le code ci-dessus (à la fois la définition et blocs de boucle)
2. Appuyez sur le bouton Exécuter
3. Commentez le bloc de la boucle (en ajoutant # au début de chaque ligne)
4. Modifier la définition de votre fonction
5. Appuyez sur le bouton Exécuter de nouveau
6. Continuez donc à changer la définition et appuyez sur Run!
7. Appuyez sur Stop

Par exemple, commencez avec le code ci-dessus. Appuyez sur Run. Commentez le bloc de la boucle puis changer la commande de lecture en quelque chose de différent. Votre code doit ressembler à ceci :

define :play_my_synth do
    use_synth :tb303
         play 45, attack: 0, release: 0.3, cutoff: 70
    sleep 0.5
end

# loop do
#     play_my_synth
# end

Ensuite appuyez de nouveau sur le bouton Exécuter. Vous devriez entendre la note aller dans les aigues. Essayez de changer les paramètres d’attaque, de relachement et de coupure du son. Écoutez l’effet qu’ils ont. Notez que l’attaque et le relâchement changent la longueur de la note tandis que « cutoff » modifie sa « luminosité ». Essayez de changer de synthé aussi – les valeurs ludiques sont : :prophet , :dsaw et :supersaw. Appuyez sur le bouton Aide pour obtenir la liste complète.
Il y a beaucoup d’autres choses que nous pouvons faire maintenant, mais malheureusement, je suis à la fin de cet article… je vais donc vous donner quelques idées.

Tout d’abord, nous pouvons essayer la « randomisation ». Une fonction vraiment amusante est rrand. Elle provoque une valeur aléatoire entre deux valeurs. Nous pouvons l’utiliser pour créer un effet de rebond lors d’une coupure de son. Au lieu de mettre le nombre 70 comme valeur de coupure, essayez rrand (40, 120). Aussi, au lieu de seulement jouer la note 45, nous allons choisir une valeur à partir d’une liste de nombres. Essayez de changer 45 à chord(:a3, :mineur).choose. Votre ligne de jeu devrait ressembler à ceci :

play chord(:a2, :minor).choose, attack: 0,
release: 0.3, cutoff: rrand(40, 120), pan:
rrand(- 1, 1)

Maintenant, mettez un peu de FX dedans, « bidouillez » et surtout amusez-vous bien! Voici encore quelques points de départ intéressants. Modifiez le code, digérez-le, prenez une nouvelle direction et jouez en concert devant vos amis !

# Haunted Bells
 loop do
 sample :perc_bell , rate: (rrand 0.125, 1.5)
 sleep rrand(0.5, 2)
 end
# FM Noise
 use_synth :fm
 loop do
 p = play chord(:Eb3, :minor).choose -
 [0, 12, - 12].choose, divisor: 0.01, div_slide:
 rrand(1, 100), depth: rrand(0.1, 2), attack:
 0.01, release: rrand(0.1, 5), amp: 0.5
 p.control divisor: rrand(0.001, 50)
 sleep [0.5, 1, 2].choose
 end
# Driving Pulse
 define :drums do
 sample :drum_heavy_kick, rate: 0.75
 sleep 0.5
 sample :drum_heavy_kick
 sleep 0.5
 end
 define :synths do
 use_synth :mod_pulse
 use_synth_defaults amp: 1, mod_range: 15,
 attack: 0.03, release: 0.6, cutoff: 80,
 pul se_wi dth: 0.2, mod_rate: 4
 play 30
 sleep 0.25
 play 38
 sleep 0.25
 end
 in_thread(name: :t1){loop{drums}}
 in_thread(name: :t2){loop{synths}}
#tron bike
 loop do
 with_synth :dsaw do
 with_fx(:slicer, freq: [4,8].choose) do
 with_fx(:reverb,room: 0.5, mix: 0.3) do
 n1 = chord([:b1, :b2, :e1, :e2, :b3,
 :e3].choose, :minor).choose
 n2 = chord([:b1, :b2, :e1, :e2, :b3,
 :e3].choose, :minor).choose
 p = play n1, amp: 2, release: 8,
 note_slide: 4, cutoff: 30, cutoff_slide: 4,
 detune: rrand(0, 0.2)
 p.control note: n2, cutoff: rrand(80,
 120)
 end
 end
 end
 sleep 8
 end


Traduction Cordes & Âmes