![]() |
uvi-script
Musical event scripting with Lua
|
| function | postEvent (e, delta) |
| send a script event back to the script engine event queue. | |
| function | playNote (note, vel, duration, layer, channel, input, vol, pan, tune, slice, oscIndex) |
| helper function to generate a note event. | |
| function | releaseVoice (voiceId) |
| release a specific voice by sending it a note off message | |
Event structure and event manipulation functions.
Events represent musical messages (notes, controllers, etc.) flowing through the system. This group provides functions to create, modify, post, and inspect events.
Event Structure:
Events are Lua tables with fields like:
Key Functions:
| function playNote | ( | note | , |
| vel | , | ||
| duration | , | ||
| layer | , | ||
| channel | , | ||
| input | , | ||
| vol | , | ||
| pan | , | ||
| tune | , | ||
| slice | , | ||
| oscIndex | ) |
helper function to generate a note event.
if duration is greater than 0 the voice will be released after the given duration if duration is -1 the voice will be released when the note that created this callback is depressed if duration is 0 only the note-on is sent release has to be done manually using releaseVoice and the returned id
playNote also accepts a single table in place of the positional arguments. Fields can be given by name (note, velocity, duration, layer, channel, input, vol, pan, tune, slice, oscIndex) or by numeric index following the positional order (playNote{60, 100} is playNote(60, 100)). Omitted fields take the same default values as the positional form. This avoids writing a run of nil placeholders when the fields you need are far apart in the positional list:
| note | the note number in the range [0;127] |
| velocity | the note velocity in the range [1;127] |
| duration | (optional) duration of the note in milliseconds, default is -1 |
| layer | (optional) target layer index in the range [1;Program.layers] or a table of layer indices (e.g. {1, 3}), default to nil: all layers |
| channel | (optional) default to nil: all channels |
| input | (optional) default to nil: all inputs |
| vol | (optional) initial linear gain, default to 1 |
| pan | (optional) initial pan in the range [-1;1], default to 0 |
| tune | (optional) initial tuning in fractional semitones, default to 0 |
| slice | (optional) sliceId to trigger if when targetting the slice oscillator |
| oscIndex | (optional) oscillator index to trigger within one keygroup |
Example:
| function postEvent | ( | e | , |
| delta | ) |
send a script event back to the script engine event queue.
The event's layer field can be a single index or a table of indices (e.g. {1, 3}) to target multiple layers at once. When a table is provided, a separate event is dispatched for each layer.
The event's channel field must be in [0;16] and input in [0;4]: 1-16 (resp. 1-4) target a specific MIDI channel (resp. input), while 0 means omni and is equivalent to omitting the field.
| e | event to be sent |
| delta | (optional) delay in ms to be applied to the event default to 0 |
| function releaseVoice | ( | voiceId | ) |
release a specific voice by sending it a note off message
| id | the id of the voice to be released |
Example: