Tidal Cycles: guide de survie [EN COURS DE REDACTION]

 

Ce guide est un effort pour compléter et rendre plus naturelle la progression au travers de la documentation de Tidal Cycles : Tidal Cycles Userbase. J’y ajoute de manière régulière des compléments et des informations nouvelles. Le but recherché est d’introduire lentement le lecteur à des mécanismes de plus en plus complexes, plutôt que le confronter immédiatement à l’entièrement complexité du langage.

 

Le menu suivant ne concerne que la procédure d’installation et de configuration. Si vous possédez déjà Tidal Cycles, sautez cette étape. 

INSTALLATION ET PREMIER LANCEMENT

Différentes techniques d’installation existent selon la plateforme sur laquelle vous vous trouvez. Je recommande d’ordinaire d’installer Tidal Cycles manuellement. L’installation automatique existe, mais pose aujourd’hui toujours problème.

INSTALLATION AUTOMATIQUE

Une explication détaillée de l’installation automatique pour Windows se trouve sur cette page. Un installateur automatique pour macOS, en version de développement, existe à cette adresse. Il n’existe pas d’installateur automatique pour Linux. Aucune version mobile (Android, iOS) n’est disponible.

INSTALLATION MANUELLE

Avant toute chose, veuillez installer les logiciels suivants :

— Atom (éditeur de texte avancé, open-source). Une fois installé, rendez-vous dans l’utilitaire d’installation des packages et installez le package tidalcycles. Fermez Atom pour le moment. Pour ouvrir le menu des options, le raccourci Windows+, ou cmd+, devrait fonctionner.

– SuperCollider (moteur audio, IDE intégré). Choisissez la version la plus stable, et celle qui correspond à votre système d’exploitation. L’installation est automatique. Ouvrez SuperCollider et entrez la commandes suivante :

 Quarks.checkForUpdates({Quarks.install("SuperDirt", "v1.1.1"); thisProcess.recompile()})

Attendez quelques instants. SuperCollider installe les dépendances requises et recompile les librairies.

– SC3Plugins : utile mais n’est pas nécessaire. Un peu plus complexe à installer mais permet ensuite de débloquer certains synthétiseurs / effets audio par défaut de Tidal Cycles.

– Haskell : l’installation peut être particulièrement problématique. Il vous faut installer la distribution la plus complète qui soit. Prend un peu de place, mais nécessaire pour faire fonctionner Tidal correctement.

Une fois que vous possédez tout les pré-requis, ouvrez un terminal et entrez la commande suivante :

cabal update ; cabal install

Selon votre système d’exploitation, vous aurez ou n’aurez pas à passer par le terminal. Les utilisateurs de Linux et de MacOS trouveront le terminal dans leurs applications par défaut. Pour les utilisateurs de Windows, la combinaison Windows+R ouvrira un invité de commande, tapez powershell. Vous pourrez alors taper cette même commande dans le terminal ouvert. Au besoin, lancez Powershell en mode administrateur.  

Vous êtes prêts à utiliser Tidal Cycles.

Il existe plusieurs manières de lancer Tidal Cycles. Voici une explication assez générale de la procédure :

– démarrage du serveur SuperDirt (options et configuration possible).

– ouverture de votre éditeur de texte et basculement vers le mode Tidal.

(Pour ce guide, nous détaillerons uniquement la démarche pour ce qui concerne Atom. Si vous râlez de ne pas trouver d’informations pour Vim, Emacs ou VSCode, vous devriez déjà être en mesure de trouver les informations qu’il vous faut.)

LANCEMENT DEPUIS ATOM


1) Ouvrez SuperCollider et tapez la commande suivante dans l’éditeur de texte. Pour l’évaluer, Shift+Return :

SuperDirt.start

Vous devriez apercevoir les différentes étapes de lancement dans la console. Lorsque le processus est terminé, Tidal Cycles est prêt à recevoir des instructions.

2) Ouvrez Atom. Deux options s’offrent à vous :

– sauvegardez un fichier texte avec l’extension .tidal. Atom reconnaîtra que vous souhaitez utiliser la syntaxe de Tidal Cycles.

– dans un buffer vide, pressez les touches Alt+Shift+P, puis tapez “grammar”. Choisissez la syntaxe Tidal.

3) Entrez la commande suivante, puis pressez les touches Ctrl+Return :

d1 $ s "hh"

Si vous entendez une cymbale, tout roule pour vous.

 

SYNTAXE DES PATTERNS

Cette section d’introduction vise à introduire la syntaxe de manipulation des patterns, centrale pour comprendre le fonctionnement de Tidal Cycles.

FONDAMENTAUX

Tidal Cycles est un langage précis et concis de manipulation de patterns. Un pattern peut se composer de samples, de notes ou de paramètres divers. Pour cette section, nous utiliserons hh (un son de cymbale fermée par défaut) comme élément de base. Les patterns sont définis par les guillemets qui les enserrent (“hh hh”). Chaque élément composant un pattern est une information, qu’il s’agisse d’un nombre, d’une référence à un sample ou d’une information particulière.

Tidal s’appuie sur une conception cyclique du temps. Par défaut, chaque pattern est d’une longueur x, x définissant la longueur d’un cycle. La longueur d’un cycle peut être définie par la commande setcps 1indique ici que nous souhaitons avoir pour base temporelle un compte d’un cycle par seconde. 

L’introduction d’un élément dans un cycle ne rallonge pas sa durée, mais au contraire, divise la durée de l’évènement par le nombre d’éléments présents dans le pattern. Chaque élément introduit dans un pattern divise le cycle de la manière la plus équitable possible. Pour bien comprendre ce point, le recours à une représentation graphique est salutaire. Voici un exemple imagé : 

Et voici la syntaxe qui y correspond : 

d1 $ s "hh"
d1 $ s "hh*2"
d1 $ s "hh*3"
d1 $ s "hh*4"

     

Envisager celacomme une noire, une croche, un triolet ou deux doubles est un réflexe courant. Cela ne fait pourtant qu’apporter de la confusion. Il est important de toujours garder à l’esprit cette logique de cycle pour ne pas être surpris. Envisagez le pattern suivant : 

d1 $ s "hh*4 hh*4"

Pour le comprendre, introduisons la notion de pas. Un pattern peut se diviser en x pas, chaque pas correspondant à un évènement. Nous effectuons ici deux divisions de cycle : 1) nous le divisions en deux pas. 2) chaque pas est divisé à son tour en quatre. De manière contre-intuitive, multiplier revient ici à diviser.Chaque subdivision de notre sample hh est donc deux fois plus courte que dans l’exemple précédent.

     

OPERATEURS ARITHMETIQUES

L’exemple précédent illustre l’existence d’une mécanique basique de division, symbolisée des opérateurs arithmétiques : 

– la multiplication : d1 $ s “hh*4”.

– la division : d1 $ s “hh/2”.

– la probabilité (50/50) : d1 $ s “hh*2?”

SUBDIVISIONS

Il existe différentes manières de composer un pas, c’est-à-dire de le diviser : 

– groupement sur un pas : d1 $ s “[hh hh*2] hh” ou d1 $ s “hh hh*2 . hh”.

– alternance entre deux évènements sur un pas : d1 $ s “”.

Il n’existe aucune limite concernant la profondeur de subdivision. Vous pouvez subdiviser autant que vous le souhaitez.

     

      

REPETITION ET DUREE

Lors des premières heures d’utilisation de Tidal, il est fréquent d’utiliser hh*4 en pensant que l’on va répéter un évènement, et non pas diviser un pas. De manière similaire, on l’utilise parfois en pensant que l’évènement durera quatre fois plus longtemps, ce qui est une erreur. Certains symboles permettent ce type d’opérations : 

– le point d’exclamation répète un évènement x fois : d1 $ s “bd!4”.

– le tiret bas (_) ou l’arobase (@) insèrent un temps vide : d1 $ s “hh _ _” ou d1 $ s “hh@3”.

/!\ ATTENTION : Dans tout les cas, ces opérations ajoutent un pas au cycle. En augmentant la durée d’un évènement, vous divisez fatalement le cycle !

 

GROUPEMENT

Vous pouvez jouer plusieurs évènements sur un même pas en utilisant la syntaxe suivante :

– la virgule : d1 $ s “[hh,hh*2]

/!\ ATTENTION : il faut se placer dans une subdivision. Pensez-y, c’est logique.

     

SYNTAXE EUCLIDIENNE

La division des patterns en cycles est plus ordinairement connue en musique électronique sous le nom de séquence euclidienne, opérée par des séquenceurs euclidiens. Tidal est une version sous hormones de séquenceur euclidien. Vous pouvez inclure dans vos patterns une syntaxe euclidienne, en définissant le nombre de divisions du cercle et le nombre de pas que vous placez sur celui-ci. 

– séquence euclidienne : d1 $ s “hh( nombre de pas, nombre de divisions )” ce qui donne d1 $ s “hh(5,12)”.

En combinant le groupement et la syntaxe euclidienne, vous pouvez obtenir une forme élégante de séquenceur, ici un pattern de batterie :

  d1 $ s “[hh(8,8),sn(1:8),bd(4,4)]”.

    

La section précédente ne considérait qu’un pattern, et la syntaxe symbolique qui peut le composer. Lorsque vous improviserez, vous aurez souvent à utiliser des patterns pour influencer d’autres patterns et à composer non plus à l’échelle d’un pattern, mais de plusieurs. Tidal offre des outils pour rendre ces manipulations triviales.

Il faut distinguer deux types d’opérations possibles :

— combinaison de patterns.

— modification/altération de patterns à l’aide d’un/d’autres patterns.

COMBINAISON PAR SUPERPOSITION

Tidal offre la possibilité de superposer différents patterns. Rappelez-vous que par défaut, deux patterns auront une durée équivalente, ceux-ci ne faisant jamais qu’un cycle. On utilisera l’opérateur stack pour la superposition : d1 $ stack[ s “bd bd bd bd”, s “hh*4 hh*8”]. Pour des raisons évidentes de style, il est d’usage d’écrire une superposition sur plusieurs lignes (cela prendra tout son sens plus tard) :

d1
  $ stack [
  s "bd bd bd bd",
  s "hh*4 hh*8"]

Nous aurions théoriquement pu écrire cela à l’aide d’un seul pattern, mais cette syntaxe permet de véritablement différencier vos patterns comme deux entités différentes. Nous pourrons plus tard appliquer des fonctions individuellement sur chacun d’entre eux. 

COMBINAISON PAR CONCATENATION

Il existe différents opérateurs permettant de concaténer des patterns, c’est-à-dire, de les faire tenir tous sur un seul cycle : 

  1. par écrasement : jouer tout les patterns assez vites pour qu’ils entrent dans un cycle. 
  2. par distribution : on joue le premier, puis le second, puis on revient au premier, etc.. 
  3. par l’aléatoire : on joue parfois le premier, parfois le second. 
Voici maintenant leur équivalent dans la syntaxe de Tidal :
 
  1. par écrasement : d1 $ fastcat [s “bd*4′, s “hh*4].
  2. par distribution : d1 $ cat [s “bd*4”, s “hh*4”].
  3. par aléatoire : d1 $ s randcat [s “bd*4”, s “hh*4”].

Retenez que les trois lettres cat valent pour concaténation, et vous retrouverez rapidement les variantes. Certaines variantes sont redondantes ou sont des synonymes. L’opérateur slowcat, contraire de fastcat, est en réalité cat

/!\ ATTENTION : Tidal regorge de fonctions redondantes, mais qui peuvent se montrer plus ou moins utiles selon la situation. Notons l’existence de append et de fastAppend, que nous reverrons plus tard. Certaines fonctions sont également redondantes avec la syntaxe des patterns plus courte. Exemple : d1 $ sound (overlay “hh*4” “bd*2”).

Beaucoup de ces fonctions sont des reliquats d’une époque plus ancienne à laquelle Tidal ne pouvait pas recevoir de pattern comme paramètres pour les fonctions. 

ALTERATION/MODIFICATION : SYNTAXE

Il est possible de modifier les valeurs retournées par un pattern par l’action d’un autre pattern. Le fonctionnement est un peu plus délicat que ce que nous avons vu jusqu’à présent. Il existe une syntaxe arithmétique spéciale, propre à Tidal Cycles. Afin de ne pas trop paraphraser, je vous renvoie à la page suivante si vous souhaitez l’étudier en détail. 

Chaque fois que vous utilisez un symbole arithmétique en dehors d’un pattern, vous utilisez en réalité une simplification de la forme que ceux-ci prennent pour Tidal Cycles. +, , * ou / sont des raccourcis pour la syntaxe suivante :

  1. + ou |+|.
  2.  ou |-|.
  3. * ou |*|.
  4. / ou |/|.
  5. % ou |%|.
Ces opérateurs mathématiques introduisent en réalité un concept fondamental, à savoir la provenance et la destination d’un pattern en interaction avec un autre. d1 $ n “0 1 2” +| “0 2 3” == d1 $ n “0 3 5”.