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 restantsChaque 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
- Les événements MIDI entrent dans le script.
- Chaque instruction traite le flux d'événements.
- Les instructions peuvent filtrer (keep/drop), transformer (modifier) ou laisser passer.
- Les événements finaux sortent vers le nœud suivant du pipeline.
Filtrage vs Transformation
- Filtrage :
keep/dropsélectionnent les événements qui continuent. - Transformation :
transpose,vel scale,note mapmodifient les données de l'événement. - Contrôle de flux :
when,pass,mutecontrô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/Offcc— Messages Control Changepc— Program Changebend— Pitch Bendaftertouch— Channel Aftertouchclock,start,stop,continue,realtime— Messages systèmeall— Correspond à toutch <spec>— Filtre de canal (voir Spécification de canal ci-dessous)note <range>— Filtre de plage de notescc <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'horlogeSpé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 à 8Transformations
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