S5) Structurer le temps

Polymétrie, silences, vitesse

Accolades, périodes, trois silences et les deux philosophies du temps

Le temps musical n’est pas une ligne — c’est un réseau. BPscript hérite de BP3 les outils pour le décrire : superposer des flux, découper en périodes, jouer avec la vitesse, et choisir entre le temps mesuré du métronome et le temps libre de l’ālāp.

Où se situe cet article ?

Après les types (S3) et les backticks (S4), on aborde un domaine où BPscript est particulièrement outillé : structurer le temps. C’est le cœur de l’héritage BP3. Cet article suppose une familiarité avec le concept de polymétrie — pour une introduction, voir B5.


Les accolades {} : polymétrie et groupement

Une musique a souvent plusieurs choses qui se déroulent en même temps — une mélodie et un rythme — ou des motifs qu’on veut traiter comme un tout. Les accolades servent à ça, et elles ont deux rôles selon qu’on y met une virgule ou non :

Polymétrie — plusieurs voix simultanées

 

S -> { melodie, rythme }

 

La virgule , sépare les voix. Chaque voix a sa propre durée — le moteur BP3 calcule le plus petit commun multiple (PPCM) pour les synchroniser. C’est la polymétrie au sens fort : les rapports de durée peuvent être irrationnels (B5).

Groupement temporel — une seule voix

 

S -> A {B C D} E F

 

Sans virgule, les accolades regroupent des symboles en une unité temporelle. Le groupe {B C D} occupe la même durée qu’un symbole simple. On peut y appliquer un qualificateur :

 

S -> A {B C D}[speed:2] E F      // B C D joués à vitesse double

 


La notation périodique .

Comment obtenir trois groupes de même durée sans calculer à la main « ce groupe vaut 1/3, celui-là 1/3… » ? C’est le rôle du point . : il découpe une séquence en fragments de durée symbolique égale.

 

S -> A B . C D . E F              // 3 fragments de durée égale

 

Chaque fragment entre les . occupe le même temps. C’est un mécanisme fondamental de BP3 pour construire des structures proportionnelles sans calculer les durées à la main.

Combinable avec la polymétrie :

 

S -> { A B . C D, E F G }        // voix 1 : 2 fragments, voix 2 : 3 symboles

 

Le . et le , sont les deux faces du même mécanisme d’expansion de BP3 — ils sont transmis tels quels au moteur.


Les trois silences

BPscript distingue trois façons d’exprimer l’absence de son :

Symbole Nom Durée Effet
- silence fixée par le contexte absence d’événement, occupe du temps
_ prolongation étend l’événement précédent le son continue, pas de nouvelle attaque
... repos indéterminé calculée par le moteur PolyMake trouve la durée optimale

La distinction est cruciale. Comparez :

 

Sa - Re          // silence entre Sa et Re — deux sons séparés par du vide
Sa _ Re          // Sa dure 2 positions — un seul son prolongé, puis Re
Sa ... Re        // le moteur calcule la durée du repos pour équilibrer les voix

 

Le repos indéterminé ... est le plus subtil : dans un contexte polymétrique, le moteur BP3 (via l’algorithme PolyMake — voir B13) calcule la durée qui produit la structure temporelle la plus simple. Le compositeur écrit le minimum, le moteur fait le reste :

 

S -> { A B C ..., D E F G }      // le ... compense la différence de longueur

 

C’est la notation la plus proche de ce qu’un musicien humain attendrait : on spécifie la structure, pas les détails de timing.


Vitesse : [speed:] sur un groupe et opérateurs de durée

Deux mécanismes distincts contrôlent la vitesse, et ils ne compilent pas de la même façon.

[speed:N] sur un groupe polymétrique → ratio

Sur un groupe {}, [speed:N] exprime un ratio de tempo polymétrique. En BP3, ce ratio se place en première position dans les accolades :

BPscript BP3 compilé
{A B}[speed:2] {2, A B}
{A B}[speed:1/2] {1/2, A B}
{mi fa sol}[speed:2/3] {2/3, mi fa sol}

Le compilateur traduit {...}[speed:N]{N, ...}. Pas de ratio implicite en BPscript : tout passe par [speed:].

Opérateurs de durée [/N], [\N], [*N], [**N] → paire encadrante

Sur un symbole ou un groupe, les opérateurs temporels de BP3 sont exposés directement et compilent en une paire encadrante de _tempo() (l’instruction de changement de tempo de BP3) :

BPscript BP3 compilé Effet
A[/2] _tempo(2/1) A _tempo(1/2) double la vitesse de A
A[*2] _tempo(1/2) A _tempo(2/1) divise la vitesse de A par 2
{A B}[/2] _tempo(2/1) {A B} _tempo(1/2) groupe à vitesse double, portée locale

La paire encadrante garantit que l’effet est local : le tempo est rétabli après l’élément. C’est la différence essentielle avec le ratio polymétrique de [speed:], qui est une propriété structurelle du bloc {}.

 

S -> A {B C D}[speed:2] E F
// B C D joués à vitesse double via le ratio polymétrique, A et E à vitesse normale

 


Contrôles par élément : [] moteur vs () runtime

BPscript distingue deux types de contrôles, avec deux syntaxes :

[] — instructions moteur (BP3)

Les crochets [] portent des instructions pour le moteur BP3. Ils s’appliquent aux symboles, aux groupes et aux règles. Sur un élément du RHS, [] s’écrit toujours en suffixe : collé à droite de l’élément qu’il qualifie (sans espace).

 

A[/2]                            // symbole : opérateur de durée, en suffixe
{A B C}[speed:2]                 // groupe : ratio polymétrique
S -> A B C [weight:3]            // règle : poids 3 (en fin de règle)

 

Les clés réservées du langage dans [] sont : les opérateurs de durée /N, \N, *N, **N, ainsi que mode, scan, weight, speed, on_fail, tempo, meter, scale (gamme). Toute autre clé du langage dans [] est une erreur.

D’autres mots (retro, rotate, keyxpand, striated, smooth, stop, goto…) sont des contrôles moteur fournis par la librairie @controls, pas des clés réservées du langage lui-même. Ils existent parce que la librairie les définit, pas parce que BPscript les connaît. La liste complète des clés du langage est dans S12.

() — paramètres runtime (transport/REPL)

Les parenthèses () portent des paramètres destinés au runtime — BPscript ne les interprète pas, il les transporte. Trois portées (toujours en suffixe) :

 

Sa(vel:120)                      // symbole : vel=120 pour cette note
{A B C}(vel:80)                  // groupe : vel=80 pour tout le groupe
S -> A B (vel:120)               // règle : vel=120 pour toute la phrase

 

Le compilateur traduit les paramètres runtime en jetons _script(CTn) — des renvois opaques vers une table de contrôles tenue à part :

BPscript BP3 compilé
Sa(vel:120) Sa _script(CT0) (CT0 = vel:120)
S -> A B (vel:120) _script(CT1) A B (portée règle)

La distinction []/() est fondamentale : [] change le comportement du moteur (vitesse, poids, mode), () change le rendu par le runtime (vélocité, pan, instrument).


Types de dérivation

BP3 offre plusieurs stratégies pour choisir quelle règle appliquer quand un non-terminal (symbole qui peut être réécrit) a plusieurs règles candidates. En BPscript, le type de dérivation se déclare comme directive de bloc via @mode:X — il s’applique à toute la sous-grammaire qui suit :

Type Nom complet Comportement
ord Ordered Les règles sont appliquées dans l’ordre de déclaration (de haut en bas)
random Random Une règle est choisie aléatoirement parmi les candidates, pondérée par les poids
lin Linear (leftmost) Choix aléatoire parmi les règles applicables au non-terminal le plus à gauche
sub1 Substitute first Substitution de la première occurrence du non-terminal uniquement
sub Substitute all Substitution simultanée de toutes les occurrences
tem Templates Appariement via le bloc TEMPLATES
poslong Positional longest Comme sub1, mais sélectionne la dérivation la plus longue

 

@mode:random                     // toutes les règles ci-dessous sont en mode aléatoire

S -> A B C                       // choix aléatoire pondéré
S -> D E F                       // idem — même sous-grammaire

-----                            // séparateur de sous-grammaire

@mode:ord                        // les règles suivantes sont en mode ordonné
A -> Sa Re Ga
A -> Pa Dha Ni

 

Le @mode:X persiste jusqu’au prochain changement de mode. Le mode random est le plus courant en composition : il produit des variations imprévisibles, contrôlées par les poids (B4). Les détails de chaque mode sont dans B3.

Direction de scan

Distincte du type de dérivation, la direction de scan fixe le sens dans lequel le moteur cherche, dans la chaîne en cours (le work string de BP3), le prochain symbole à réécrire — donc quelle occurrence est choisie quand plusieurs conviennent :

Direction Qualificateur Effet
LEFT [scan:left] Cherche le symbole à réécrire de gauche à droite
RIGHT [scan:right] Cherche de droite à gauche
RND [scan:rnd] Cherche dans un ordre aléatoire (défaut)

 

S -> A B C [scan:right]          // cette règle scanne de droite à gauche

 

La direction de scan est un qualificateur par règle ([scan:X]), tandis que le type de dérivation est une directive par sous-grammaire (@mode:X). Les deux sont orthogonaux. Le défaut, si aucun [scan:] n’est précisé, est rnd.


Trois directions

La flèche de dérivation porte la direction :

 

S -> A B C                       // production — quand le moteur génère
S <- A B C                       // analyse — quand le moteur reconnaît (droite → gauche)
S <> A B C                       // bidirectionnel — valable dans les deux phases

 

La direction -> est la plus courante : le non-terminal à gauche se réécrit en la séquence à droite (production). <- correspond au sens de l’analyse, quand le moteur reconnaît une séquence donnée. <> est bidirectionnelle : la règle est valable en génération comme en analyse.


Temps strié et temps lisse

Pierre Boulez, dans Penser la musique aujourd’hui (1963), distingue deux textures du temps par une image textile : un tissu strié est traversé de lignes régulières (une pulsation), un feutre lisse est homogène, sans grille.

  • Temps strié : temps compté. Une pulsation découpe le temps en unités ; les durées sont des positions sur cette grille. C’est le temps du métronome, de la danse, de la majeure partie de la musique occidentale.
  • Temps lisse : temps non compté. Pas de grille de référence ; les durées sont des propriétés propres aux objets sonores. C’est le temps de l’ālāp (introduction lente et non mesurée d’un raga indien), du bourdon, de l’improvisation libre.

Attention : strié/lisse n’est pas la distinction discret/continu du traitement du signal. Les deux régimes utilisent la même arithmétique rationnelle ; ce qui change, c’est la source de la durée — la grille (strié) ou l’objet lui-même (lisse). Voir B12.

BP3 implémente les deux régimes : _striated (le défaut) place les événements sur une grille de pulsation ; _smooth fait porter à chaque objet sa propre durée (via des time patterns). En BPscript, on bascule de l’un à l’autre avec les contrôles striated / smooth (librairie @controls).

Au-delà du régime, B12 dégage deux façons d’agir sur le flux temporel : le temps comme propriété de l’objet — le smooth time, que BPscript retrouve dans le type cv (un objet CV porte sa propre durée — voir S3) — et le temps comme instruction insérée dans le flux — l’opérateur _tempo() de BP3, exposé en BPscript par [/N], [*N]… vus plus haut.


Le tempo : trois niveaux

BPscript distingue trois niveaux de contrôle du tempo, fournis par la librairie @controls :

Contrôle Syntaxe Effet
Multiplicateur relatif [tempo:2] Double la vitesse courante
Marquage métronomique absolu @mm:120 120 BPM (battements par minute)
Bascule strié/lisse striated / smooth Change le mode temporel

 

@controls                        // importer les contrôles de performance
@mm:120

S -> A B [tempo:2] C D           // C et D à vitesse double (relatif)

 

Le [tempo:2] est une clé réservée du langage. Les bascules striated/smooth sont des contrôles de la librairie @controls. Ces trois niveaux correspondent aux concepts explorés dans B12.


Ce qu’il faut retenir

  1. {} = polymétrie (avec ,) ou groupement (sans ,)
  2. . = notation périodique — fragments de durée égale
  3. Trois silences : - (vide), _ (prolongation), ... (repos calculé par le moteur)
  4. [speed:N] sur un groupe = ratio polymétrique {N, ...} ; [/N], [*N] = opérateurs de durée (paire _tempo encadrante)
  5. 7 types de dérivation (ord, random, lin, sub1, sub, tem, poslong) via @mode:X par sous-grammaire + 3 directions de scan (left, right, rnd — défaut rnd) via [scan:X] par règle
  6. 3 directions : -> (gauche→droite), <- (droite→gauche), <> (bidirectionnel)
  7. Deux temps : strié (durées = positions sur une grille, _striated) et lisse (durées = propriétés des objets, _smooth) — distinct de discret/continu

Pour aller plus loin

  • Bel, B. (2001) : « Rationalizing Musical Time: Syntactic and Symbolic-Numeric Approaches » — les fondements du traitement du temps dans BP3. The Ratio Book.
  • Boulez, P. (1963) : Penser la musique aujourd’hui — la distinction temps strié/temps lisse qui sous-tend l’architecture temporelle de BP3

Glossaire

  • Polymétrie : Superposition de voix avec des durées potentiellement différentes, synchronisées par le PPCM
  • Notation périodique : notation utilisant . pour découper une séquence en fragments de durée symbolique égale
  • Prolongation : Symbole _ qui étend la durée du son précédent sans nouvelle attaque
  • Repos indéterminé : Symbole ... dont la durée est calculée par le moteur BP3 (algorithme PolyMake)
  • Ratio polymétrique : Facteur [speed:N] qui place un rapport de tempo en tête d’un bloc {} (compilé {N, ...})
  • Mode de dérivation : Stratégie de choix de règle quand un non-terminal a plusieurs règles candidates (ord, random, lin…)
  • Temps strié : temps compté, où les durées sont des positions sur une grille de pulsation (_striated, défaut en BP3) — Boulez 1963
  • Temps lisse : temps non compté, où les durées sont des propriétés propres aux objets, sans grille (_smooth) — Boulez 1963 ; à ne pas confondre avec la continuité du signal
  • Ālāp : Introduction lente et non mesurée d’un raga indien — exemple paradigmatique de temps lisse
  • PPCM : Plus Petit Commun Multiple — utilisé par BP3 pour synchroniser les voix polymétriques

Liens dans la série

  • S2 — Les symboles temporels (-, _, …, .)
  • S3 — Le type CV et la question « qui interpole ? »
  • S6 (à venir) — Flags et modes — comment les conditions interagissent avec la dérivation
  • S8 — Patterns, captures et templates
  • B5 — La polymétrie dans BP3 — fondements
  • B12 — Les trois temps de BP3 — temps symbolique, strié, physique
  • B13 — PolyMake — l’algorithme d’expansion polymétrique

Prérequis : S2, B5
Temps de lecture : 14 min
Tags : #BPscript #polymétrie #temps #silence #Boulez #BP3


Prochain article : S6 — Composer avec des conditions : flags et parcours


Retour à l’index