What is UVIScript?

UVIScript is a domain-specific scripting language built on top of the Lua scripting language.

It has been created in order to provide greater flexibility and inject artifical intelligence when generating and interpreting (MIDI) musical events.

What are UVI scripts?

UVI scripts are small files written in the Lua language and using the UVIScript API that process and/or generate musical Events. It can be seen as MIDI Effects on steroids. Scripts also have access to all the synthesis engine and can query and modify module parameters.

What can be done with UVIScript?

Possibilities are endless and only limited to your imagination:

sequencing, arpegiation

performance tools to enhance and create more realistic sequences: Legato, Portamento...

instrument-specific scripts to simulate idiomatic playing modes: chord recognition, chord voicing, string selection... etc

harmonisation

Ensemble/unison simulation

generative/algorithmic music

micro-tuning

effects: echo, tremolo, vibrato

complete synthesis engine scripting and remote control.

transformations: mirror, scale constraints...

advanced instrument user interfaces with custom graphics

...

API Reference topics

Lua documentation

Regarding lua documentation, we recommend:

They are really well written and provide a very good introduction and a solid base to begin scripting with UVIScript. Using a simple, widespread but powerful scripting language that one can learn online or with a book was one of the main motivation for using Lua.

The Lua virtual machine used in UVIScript

UVIScript is built on top of a sandboxed Lua 5.1 virtual machine with some custom extensions.

All the lua code is executed with real-time priority except the main script chunk and onLoad, onSave. This means that execution time should be predictable and bounded and that no memory allocation should happen (lua internal memory is allocated with a special memory pool). Avoid any lengthy operation like looping over a table with 10000 entries. This also means that the standard lua libraries: os and io are not available.

Here's the list of the standard libraries that are loaded:

Third-party lua libraries are not allowed for the same reasons as stated above.