Premier son / premier problème

Mauvaise pratique / Mauvaise musique

Dès à présent, la colonne de gauche sera consacrée au guide principal, la colonne de droite à des précisions ou suggestions. Voyez cette dernière colonne comme un encouragement à approfondir ce que vous savez sur un élément du langage.

Il est temps. Commençons à jouer quelques notes. Lancez Sonic-Pi, copiez l’exemple suivant et jouez-le en pressant Ctrl + R :


play 64 sleep 0.5 play 64 sleep 0.5 play 65 sleep 0.5 play 67 sleep 0.5 play 67 sleep 0.5 play 65 sleep 0.5 play 64 sleep 0.5 play 62 sleep 0.5 play 60 sleep 0.5 play 60 sleep 0.5 play 62 sleep 0.5 play 64 sleep 0.5 play 64 sleep 0.75 play 62 sleep 0.25 play 62 sleep 0.25


Vous remarquerez rapidement que cet exemple est mauvais : répéter une série d’instructions n’est jamais une bonne idée. Répéter est toujours — ou presque — une mauvaise idée. Vous venez toutefois de rencontrer play et sleep, deux éléments centraux de la syntaxe. L’un permet de jouer une note, l’autre de générer un intervalle de temps entre deux instructions. Les numéros employés symboliser une note en notation MIDI[0] :

60 61 62 63 64 65 66 67 68 69 70 71 72

Do ♯ Ré ♯ Mi Fa ♯ Sol ♯ La ♯ Si Do

L’exemple précédent pourrait être traduit comme suit sur une partition traditionnelle :

Nouvelle version, plus saine

Voici une version plus minimaliste et plus élégante, qui vous permettra d’apprendre de nouveaux éléments de syntaxe :


live_loop :ode do ; tick     play (ring :e4, :e4, :f4, :g4, :g4,     :f4, :e4, :d4, :c4, :c4, :d4, :e4, :e4, :d4, :d4,:r).look     sleep (knit 0.5, 12, 0.75, 1, 0.25, 2, 1, 1).look end


Cet exemple est bien plus avancé, et je brûle ici volontairement les étapes. Mon objectif est de vous permettre rapidement d’improviser. J’omet nombre d’étapes préliminaires de votre apprentissage, que l’on rattrapera en cours de route. Essayez de modifier le code au fur et à mesure de votre lecture, afin d’observer à chaque étape le résultat. Vous aurez remarqué que dans ce cas présent, la lecture ne s’interrompt plus : c’est une boucle. Vous voici condamnés à la répétition éternelle d’une mauvaise version synthétique de l’ode à la joie. Modifiez quelques valeur pour en tirer quelque chose, c’est déjà de la musique.

Nous venons de délaisser la monotone linéarité du premier exemple pour entrer dans le monde des boucles. Programmation et musique partagent un même amour pour les boucles, la répétition du même, et pour un délicat balancement entre conception cyclique et linéaire du temps. Cette boucle est similaire à celles que vous pourriez. écrire en Python ou en Ruby, à ceci prêt qu’elle est d’un type spécial, défini par Sonic-Pi pour avoir certaines particularités intéressantes pour un musicien. L’essentiel étant que vous retombez dans un monde connu, et que la lisibilité de votre code est désormais grandement accrue.

Les prochains articles se fonderont sur cet extrait de code. Nous le presserons pour en tirer toutes les informations nécessaires pour maîtriser l’improvisation mélodique et rythmique. Il nous permettra d’introduire les éléments fondamentaux de syntaxe. Voici ce que je vous conseille :

  • observez les exemples et copiez-les dans un buffer de Sonic-Pi. Modifiez-les jusqu’à comprendre ou avoir une intuition de leur fonctionnement[1]. Les erreurs sont aussi importantes que de jouer votre code du premier coup.
  • Dans un buffer séparé, réécrivez votre version de l’exemple, en prenant soin de respecter la syntaxe. Ce point est important. Lors d’une performance, les erreurs seront préjudiciables, et représentent l’équivalent d’une fausse note, voir d’un échec complet de votre performance. Jouez bien, écrivez bien.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[0] Notation MIDI : voici les notes de 1 à 127, jouées dans l’ordre ascendant puis descendant en triples croches.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[1] Exemple : voici ce qu’il est possible de faire en jouant juste avec les éléments de langage vus dans l’exemple ci-dessus :

live_loop :folklo do ; tick play (ring :c4, :f4, :a4, :c5, :c4, :g4, :c5, :e5, :d4, :f4, :a4, :bb4, :d4, :f4, :g4, :a4).look play (ring :c2, :c3).look sleep (ring 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.5).look end