S1) BPscript
Un langage moderne pour le Bol Processor
Où se situe cet article ?
C’est le premier article de la série S, consacrée à BPscript — un langage de composition qui modernise l’écriture du Bol Processor (BP3, présenté en I2). Aucun prérequis technique n’est nécessaire pour cet article : il présente la vision, pas la syntaxe.
Un formalisme remarquable, dont l’accès reste exigeant
Le Bol Processor possède deux propriétés formelles rares. D’abord une puissance modulable : selon les mécanismes activés, sa grammaire va du context-free (Type 2) au context-sensitive (Type 1), voire au-delà — les flags effleurent le faiblement context-sensitive, les variables atteignent le context-sensitive complet (voir B6). C’est un curseur de complexité, pas une classe figée. Ensuite la bidirectionnalité : il peut générer de la musique et reconnaître si une séquence appartient à un langage musical (modes PROD/ANAL — voir B8), une réversibilité rare parmi les systèmes musicaux (voir L13).
Quarante ans de travail de Bernard Bel et Jim Kippen — d’abord pour modéliser l’improvisation au tabla nord-indien — lui ont donné des grammaires stochastiques pondérées (B3), la polymétrie native (B5), des flags conditionnels (B4), des patterns maître/esclave, sept modes de dérivation et de nombreuses fonctions de contrôle de performance. TidalCycles le cite comme influence (M11).
Cette richesse s’accompagne de deux exigences pour qui veut s’y mettre :
- Une syntaxe dense, héritée de quarante ans d’enrichissements, qui demande du temps pour être apprivoisée.
- Un moteur en C et une interface web issus d’un long historique de développement et de portages.
Le résultat : une barrière à l’entrée assez élevée, si bien que peu de monde profite, au final, d’un formalisme remarquable resté difficile d’accès.
La proposition : préserver le formalisme, en moderniser l’écriture
BPscript ne remplace pas BP3 : il en propose une écriture moderne.
L’idée tient en une phrase :
BP3 sait quand. BPscript le rend plus facile à lire, typé, et exécutable dans un navigateur.
Concrètement : on écrit dans un langage structuré, d’une lecture plus directe, et le transpileur traduit ce code en grammaire BP3 native. Le moteur de dérivation de Bernard Bel — n’est pas réinventé : il est réutilisé. Et comme il est porté en WebAssembly (format d’exécution dans le navigateur), il s’utilise sans installation.
Voici à quoi ressemble une scène BPscript :
@actor raga alphabet:sargam scale:sargam_22shruti transport:webaudio
[phase==1] S -> { intro, motif }
[phase==2] S -> { developpement, motif } [phase=3]
intro -> Sa _ Re Ga
developpement -> Sa Re Ga Pa Dha _ Ni Sa
motif -> { Sa Pa, Ga Re }[speed:2]
Les règles de grammaire (S ->, intro ->, etc.) sont la structure que BP3 dérive. La ligne @actor lie un alphabet et une gamme à une sortie. Les flags ([phase==1], [phase=3]) conditionnent et font évoluer la dérivation.
L’écriture est plus directe, typée, et compile vers la même puissance formelle que BP3.
Le sampler de structures
Pour comprendre ce que BPscript apporte, une analogie aide.
| Paradigme | Ce qu’on « sample » | Particularité |
|---|---|---|
| Bande magnétique | du son, linéairement | on presse Play, on attend la fin |
| Sampler de clips | des boucles, en grille | on lance, on combine, mais la structure reste plate |
| BPscript | des grammaires | la structure se dérive, se conditionne, se ramifie |
Le sampler classique découpe le temps en boucles qu’on lance et combine. C’est puissant, mais la structure reste plate — des boîtes qu’on empile.
BPscript permet de sampler de la structure. Un raga (forme mélodique de la musique indienne) n’est pas une mélodie : c’est un ensemble de règles de dérivation qui génère des mélodies. Un pattern de tabla (percussions indiennes, voir I2) n’est pas une boucle : c’est une grammaire qui produit des variations.
BPscript ne sample pas du son. Il sample de la structure.
Du code natif quand il en faut
BPscript décrit le temps — la structure, les durées, les conditions. Il ne cherche pas à remplacer un moteur de synthèse. Quand on a besoin d’un comportement sonore concret, on insère du code natif entre backticks :
`sc: SynthDef(\grain, { |freq, dens| GrainSin.ar(dens, freq) }).add`
BPscript ne cherche pas à interpréter ce code : il le confie au runtime concerné, au bon moment dans la dérivation. C’est une fonctionnalité du langage (détaillée en S4).
État actuel : les backticks sont évalués en JavaScript et le son sort via Web Audio, dans la couche d’exécution aval — le runtime, qui consomme la séquence horodatée produite par le moteur. Le périmètre de BPscript lui-même se limite au langage + transpileur + moteur BP3/WASM.
D’où vient BPscript ?
BPscript repose entièrement sur le Bol Processor (BP3).
BP3 sait déjà :
- Dériver des structures à partir de grammaires pondérées (B3)
- Superposer des flux temporels en polymétrie (B5)
- Conditionner les règles par des flags (B4)
- Tester l’appartenance d’une séquence au langage (B8)
- Apprendre les poids des règles par l’analyse (B8)
BPscript vient s’ajouter à cette base, en apportant ce qui facilite l’écriture interactive : une syntaxe plus facile à lire, un système de types adapté au live (gate / trigger / cv — voir S3), un système de hauteurs interculturel (six couches, de l’alphabet aux Hz — S9), et la notion d’actor pour gérer plusieurs instruments avec des accordages différents (S3). BPscript est cette couche : un langage qui compile vers le moteur BP3, porté en WebAssembly.
En une phrase
Le Bol Processor offre quarante ans de puissance formelle dont l’accès est resté exigeant.
BPscript en propose une écriture plus accessible — d’une lecture plus directe, typée, exécutable dans un navigateur — au service du même formalisme.
Ce qu’il faut retenir
- BPscript est un langage de composition qui compile vers la grammaire BP3 — il ne réinvente pas le moteur de dérivation
- Ce qu’il apporte : rendre plus accessible un formalisme riche dont la prise en main demandait du temps
- BP3 sait quand — BPscript le rend plus facile à lire, typé, et exécutable dans un navigateur via WebAssembly
- Le sampler de structures — on ne sample plus du son mais des grammaires qui génèrent des variations
- Du code natif entre backticks — une fonctionnalité du langage, évaluée par un runtime en aval (JS / Web Audio aujourd’hui)
- Héritage de 40 ans — grammaires à puissance modulable (du context-free au context-sensitive et au-delà) et bidirectionnelles, issues de la recherche de Bernard Bel
- L’évolution — du moteur C porté en WASM vers BPx, moteur réactif de nouvelle génération
Pour aller plus loin
- Bel, B. & Kippen, J. (1992) : « Modelling Music with Grammars: Formal Language Representation in the Bol Processor » — l’article fondateur du Bol Processor. Lien PDF
- McLean, A. (2014) : « Making Programming Languages to Dance to: Live Coding with Tidal » — les origines de TidalCycles, influencé par les travaux de Bel. DOI:10.1145/2633638.2633647
- bolprocessor.org : le site officiel du Bol Processor — documentation, exemples, code source
Glossaire
- Bol Processor (BP3) : système de grammaires formelles pour la musique, développé par Bernard Bel depuis 1989, initialement pour le tabla nord-indien
- Transpileur : programme qui traduit le code BPscript en grammaire BP3 native
- Puissance modulable : BP3 n’est pas figé à une classe de Chomsky — selon les mécanismes activés, il va du context-free (Type 2) au context-sensitive (Type 1), voire au-delà ; voir B6
- Faiblement context-sensitive : classe de langages plus expressive que les grammaires context-free, mais encore analysable en temps polynomial (TAG, CCG) ; les flags de BP3 l’effleurent, ses variables la dépassent ; voir L9
- Bidirectionnel : capable de générer et de reconnaître ; voir L13
- Backtick : caractère `
« utilisé dans BPscript pour délimiter du code natif destiné à un runtime - Flag : variable conditionnelle qui active, désactive ou fait évoluer des règles de grammaire selon son état
- Polymétrie : superposition de flux temporels aux rapports de durée potentiellement irrationnels
- Dérivation : processus par lequel une grammaire engendre une séquence en appliquant successivement ses règles
- Runtime : environnement d’exécution qui consomme la séquence horodatée produite par le moteur (couche aval)
- WebAssembly (WASM) : format d’exécution binaire qui permet de faire tourner du code compilé (ici BP3, écrit en C) dans un navigateur
Liens dans la série
- S2 (à venir) — Trois mots et vingt-quatre symboles — le langage BPscript en détail
- I2 — Bol Processor : 40 ans d’innovation — l’histoire de BP3
- B3 — Règles de dérivation — comment BP3 engendre des séquences
- B5 — Polymétrie et structures temporelles — le cœur de BP3
- M11 — TidalCycles et la filiation Bel — la connexion BP3 → Tidal
Prérequis : I2, B3
Temps de lecture : 10 min
Tags : #BPscript #BP3 #bol-processor #live-coding #grammaires-formelles
Prochain article : S2 — Trois mots et vingt-quatre symboles