Aller au contenu

Référence du langage NeuroScript ​

NeuroScript modifie les événements MIDI d'une route. Les instructions de premier niveau s'exécutent une fois pour chaque événement entrant. Un événement passe sans modification à moins qu'une règle ne le modifie, n'en produise un autre ou ne le supprime.

Faire correspondre les événements ​

Utilisez when <condition> { … }, avec un bloc else { … } facultatif.

neuroscript
when is note and channel == 1 and velocity > 110 {
  velocity = 110
}

Les types d'événements précis comprennent note_on, note_off, cc, program, bend, poly_pressure, channel_pressure, clock, start, continue, stop, active_sensing, reset et sysex. Les familles comprennent note, aftertouch, channel_voice, realtime, transport, system et any.

neuroscript
when is [note, cc] { channel = 1 }
when is note and note in C3..C4 { transpose(+12) }
when is cc and controller in [1, 74] { drop }

Utilisez ==, !=, <, <=, >, >=, and, or et not dans les conditions.

Champs d'événement ​

Les scripts peuvent lire kind, channel, note, velocity, controller, value, program, bend et pressure. Le champ kind est en lecture seule. Les autres champs peuvent recevoir une valeur lorsqu'ils s'appliquent à l'événement actuel.

neuroscript
when is note {
  note = clamp(note + 12, 0, 127)
  velocity = clamp(velocity + 10, 1, 127)
  channel = 2
}

Produire et supprimer des événements ​

drop supprime l'événement actuel. emit current produit un instantané de l'événement actuel. Les constructeurs d'événements utilisent des arguments nommés et le canal de l'événement actuel.

neuroscript
when is cc and controller == 1 {
  emit cc(controller: 74, value: value)
}

when is note and velocity > 100 {
  emit note_on(note: note + 12, velocity: velocity / 2) after 1/8 note
}

Les constructeurs disponibles comprennent cc, cc14, note_on, note_off, bend, program, bank, aftertouch, poly_pressure, channel_pressure, nrpn et sysex.

Un événement produit ne supprime pas automatiquement l'événement entrant. Ajoutez drop lorsque seul l'événement produit doit continuer.

Liaisons et état ​

Utilisez let pour une valeur immuable calculée pendant un événement.

neuroscript
when is note {
  let semitones = clamp(cc(1) / 11, 0, 12)
  note = clamp(note + semitones, 0, 127)
}

Utilisez l'état de route ou de canal lorsqu'une logique doit conserver une valeur entre les événements.

neuroscript
state route pedal: Bool = false
state channel hits: Int = 0

when is cc and controller == 64 {
  state.pedal = value >= 64
}

Les types d'état pris en charge sont Int, Bool, Note, Ratio, Duration, Kind et Policy.

Fonctions courantes ​

  • Hauteur : transpose, transpose_or_drop, octave, octave_or_drop, note_clamp, note_wrap
  • Vélocité et canal : velocity_scale, velocity_curve, channel_map
  • Mathématiques : clamp, scale, wrap, min, max, abs, lerp, quantize, deadzone, clamp7, clamp14
  • Valeurs actuelles de la route : cc(number), cc14(number), note_velocity(note), held_notes()

Temporisation ​

Les événements différés acceptent des durées comme 120ms, 2 beats ou 1/8 note. La temporisation suit le contexte d'horloge disponible pour la route.

neuroscript
when is note_on {
  emit current after 120ms
  drop
}

Valider et tester ​

Sélectionnez Valider dans l'éditeur de route avant d'enregistrer. Utilisez le simulateur pour des événements isolés, puis testez le script avec la source et la destination réelles.

Consultez les recettes musicales pour d'autres exemples.

Neurode MIDI pour macOS, iPhone et iPad