Référence de l'API Lua
Le scriptage Lua est une alternative entièrement prise en charge à NeuroScript pour les transformations MIDI avancées.
Quand utiliser Lua
Choisissez Lua lorsque vous avez besoin de :
- Structures de contrôle complexes — boucles for/while, logique procédurale, tables.
- Style impératif — programmation procédurale étape par étape.
- Syntaxe familière — langage de programmation standard (non spécifique au domaine).
Choisissez NeuroScript lorsque :
- Partage de préréglages — NeuroScript est le format d'exportation/importation canonique.
- Transformations simples — syntaxe déclarative, conviviale pour les musiciens.
- Édition visuelle — l'interface utilisateur compile en NeuroScript.
Langages complémentaires
Lua et NeuroScript accèdent tous deux au même état MIDI, à l'horloge, au BPM et au transport. Vous pouvez mélanger les deux dans différentes routes.
Sécurité : Lua s'exécute dans un bac à sable restreint (bibliothèques déterministes uniquement). Les fonctions de journalisation comme console.log(...) sont des opérations sans effet (no-ops) dans le bac à sable Lua.
Structure de l'événement
event = {
type = "noteOn", -- ou "noteOff", "cc", etc.
channel = 0, -- 0-15
data1 = 60, -- 0-127
data2 = 100, -- 0-127
timestamp = 1234567890
}Bibliothèque Neurode MIDI
La table neurode fournit des opérations MIDI de haut niveau :
-- Créer des événements MIDI
neurode.note(pitch, velocity, channel) -- Créer un événement note-on
neurode.cc(controller, value, channel) -- Créer un événement CC
neurode.programChange(program, channel) -- Créer un événement PC
-- Appeler des fonctions NeuroScript pré-compilées
neurode.callScript("transpose", event, 12) -- Transposer d'une octave vers le haut
neurode.callScript("velocityScale", event, 0.8)
-- Planification
neurode.scheduleAt(time_ms, event) -- Planifier l'événement en millisecondes
neurode.scheduleAtBeat("1/8", event) -- Planifier à la prochaine croche
-- Informations de transport
local bpm = neurode.getBPM() -- Tempo actuel
local playing = neurode.isPlaying() -- État du transport
-- Fonctions utilitaires
MIDI.noteName(60) -- "C4"
MIDI.noteNumber("C#3") -- 49
MIDI.clamp(value) -- Écrêter à 0-127Fonctions NeuroScript pré-compilées :
transpose— Décaler les notes par demi-tons.velocityScale— Multiplier la vélocité par un facteur.channelMap— Remapper le canal MIDI.- Plus de fonctions disponibles via l'API NeuroScript (voir Référence Neuroscript).
Magasin de contexte (Context Store)
context.set(scope, key, value)
local value = context.get(scope, key)
context.delete(scope, key)
local keys = context.keys(scope)
-- Il n'y a pas de context.has(...); utilisez get(...) ~= nil.
local exists = (context.get(scope, key) ~= nil)Portées (Scopes) : "local", "graph", "global"
Planification et étiquettes de sortie
Votre script peut planifier un événement pour qu'il soit émis dans le futur en renvoyant une table d'événement avec l'un des champs de planification pris en charge :
-- Planifier par millisecondes
event.afterMs = 120
-- Ou planifier par fraction de note (ex. croche)
event.after = "1/8"
-- event.afterNumerator = 1
-- event.afterDenominator = 8
-- Optionnel : étiquette pour le routage en aval
event.outputTag = 3
-- event.tag = 3
return event