|
- /*
- Vult API documentation.
-
- Author: Leonardo Laguna Ruiz - leonardo@vult-dsp.com
-
- The main difference of the Vult API compared to the JavaScript and Lua is that all interactions
- happen through functions rather than accessing to the block arrays.
-
- A Vult script requires the following two functions:
-
- fun process() { }
- and update() { }
-
- The 'process' function is called every audio sample. As inputs, it will receive the values from
- the input jacks but normalized to 1.0. This means that a value of 10.0 V in VCV Rack is received
- as 1.0. Similarly, when you return a value of 1.0 it will be output by the prototype as 10.0V.
-
- You can use the input and output jacks by adding or removing arguments to the function. For example,
- to pass all the inputs to the outputs you can declare the function as follows:
-
- fun process(i1, i2, i3, i4, i5, i6) {
- return i1, i2, i3, i4, i5, i6;
- }
-
- The 'update' function is called once every 32 samples. You can use this function to perform actions
- that do not require audio rate speed e.g. setting light colors or displying characters in the screen.
- The function 'update' do not takes or returns any value.
-
- Important: Notice that the 'update' function is declared with the keyword 'and'. In Vult language,
- this means that they share context. At the moment, declaring them differently could have an undefined
- behavior.
-
- To interact with knobs, switches, lights the following builtin functions are provided.
- NOTE: the knobs, switches and lights are numbered from 1 to 6
-
- getKnob(n:int) : real // value of the nth knob range: 0.0-1.0
- getSwitch(n:int) : bool // value of the nth switch: true/false
-
- setLight(n:int, r:real, g:real, b:real) // r, g, b range: 0.0-1.0
- setSwitchLight(n:int, r:real, g:real, b:real) // r, g, b range: 0.0-1.0
-
- samplerate() : real // current sample rate
- sampletime() : real // current time step (1.0 / samplerate())
- display(text:string) // display text in the screen
-
- */
-
-
- // Returns the r,g,b values for a given voltage
- fun getRGB(v) {
- if (v > 0.0)
- return v, 0.0, 0.0;
- else
- return 0.0, -v, 0.0;
- }
-
- // Takes two inputs and returns the result of different operations on them
- fun process(in1, in2) {
- // theses are declared as 'mem' so we can remember them and use them in 'update'
- mem sum = clip(in1 + in2, -1.0, 1.0); // use 'clip' to keep the signals in the specified range
- mem sub = clip(in1 - in2, -1.0, 1.0);
- mem mul = clip(in1 * in2, -1.0, 1.0);
- return sum, sub, mul;
- }
- and update() {
- _ = display("Add two LFO to IN1 and IN2");
- val r, g, b;
- // Set the light no 1 with the 'sum' value
- r, g, b = getRGB(sum);
- _ = setLight(1, r, g, b);
- _ = setSwitchLight(1, r, g, b);
-
- // Set the light no 2 with the 'sub' value
- r, g, b = getRGB(sub);
- _ = setLight(2, r, g, b);
- _ = setSwitchLight(2, r, g, b);
-
- // Set the light no 2 with the 'mul' value
- r, g, b = getRGB(mul);
- _ = setLight(3, r, g, b);
- _ = setSwitchLight(3, r, g, b);
-
- }
|