Skip to content

Référence du langage Neuroscript

Neuroscript est un DSL (Domain Specific Language) orienté musicien pour les transformations MIDI. Il utilise une syntaxe simple basée sur les lignes où chaque ligne représente une étape de traitement appliquée aux événements MIDI entrants.

Philosophie de conception

  • Déclaratif : Décrivez ce que vous voulez, pas comment y parvenir.
  • Orienté ligne : Une transformation par ligne, exécutée dans l'ordre.
  • Permissif : Les événements non correspondants passent par défaut.
  • Lisible : La syntaxe reflète la terminologie musicale (note, ch, transpose, vel).
  • Sécurisé : La validation à la compilation empêche les erreurs d'exécution.

Structure de base

neuroscript
# Les commentaires commencent par #
keep note             # Garder uniquement les événements de note
transpose +12 clamp   # Décaler d'une octave, écrêter si hors plage
pass                  # Passer explicitement les événements restants

Chaque ligne est une instruction. Les événements circulent de haut en bas à travers le script. Si un événement ne correspond pas à un filtre, il passe à la ligne suivante.


Concepts clés

Flux d'événements

  1. Les événements MIDI entrent dans le script.
  2. Chaque instruction traite le flux d'événements.
  3. Les instructions peuvent filtrer (keep/drop), transformer (modifier) ou laisser passer.
  4. Les événements finaux sortent vers le nœud suivant du pipeline.

Filtrage vs Transformation

  • Filtrage : keep/drop sélectionnent les événements qui continuent.
  • Transformation : transpose, vel scale, note map modifient les données de l'événement.
  • Contrôle de flux : when, pass, mute contrôlent l'exécution.

Types d'instructions

Filtrage : keep / drop

Sélectionnez les événements par type, canal, plage de notes ou numéro de CC.

Syntaxe :

neuroscript
keep <sélecteurs> [where <condition>]
drop <sélecteurs> [where <condition>]

Sélecteurs :

  • note — Messages Note On/Off
  • cc — Messages Control Change
  • pc — Program Change
  • bend — Pitch Bend
  • aftertouch — Channel Aftertouch
  • clock, start, stop, continue, realtime — Messages système
  • all — Correspond à tout
  • ch <spec> — Filtre de canal (voir Spécification de canal ci-dessous)
  • note <range> — Filtre de plage de notes
  • cc <range> — Filtre de plage de numéros CC

Exemples :

neuroscript
keep note                      # Uniquement les événements de note
keep note, ch 1                # Notes sur le canal 1
keep note, ch 1..4             # Notes sur les canaux 1 à 4
keep note C3..C5               # Notes de Do3 à Do5
drop cc 64..127                # Supprimer les CC 64 et plus
drop clock, start, stop        # Supprimer tous les messages d'horloge

Spécification de canal

Les canaux peuvent être spécifiés comme :

  • all — Les 16 canaux
  • <n> — Canal unique (1-16)
  • <n>..<m> — Plage de canaux (ex. ch 1..4)

Exemples :

neuroscript
keep ch 1          # Canal 1 uniquement
keep ch all        # Tous les canaux
keep note, ch 1..8 # Notes sur les canaux 1 à 8

Transformations

transpose

Décale la hauteur des notes par demi-tons.

Syntaxe :

neuroscript
transpose <demi-tons> [mode]

Modes :

  • clamp (défaut) — Écrête les notes à la plage 0-127.
  • wrap — Boucle les notes dans la plage (ex. 128 devient 0).
  • drop — Supprime les notes qui sortent de la plage.

Exemples :

neuroscript
transpose +12          # Monter d'une octave
transpose -7           # Descendre d'une quinte
transpose +24 wrap     # Monter de deux octaves avec bouclage

Créé avec ❤️ pour les musiciens