The Ekdahl FAR - Command reference V1.1
Introduction
The Ekdahl FAR V1.1 introduces the concept of modules. A module can contain any number of commands as well as other modules. Furthermore any number of modules of the same type can exist within a context, these are addressed using classic C-style array indexing with the help of brackets ("[ ]"). Extending on the classic usage, multiple indexes can be addressed simultaneously by either comma-separating the objects ("[0,3,4]") and using ranges ("[3-6]"). Modules can be either internal or external, meaning that they may all physically exist within a single hardware object, or they can be be remote-controlled devices. From a user perspective this however makes no difference as they will appear the same.
While all modules have their own set of commands, there are certain commands that all modules must implement and can thus be accessed anywhere within the module hierarchy. There are also base commands that always exist within any given FAR ecosystem as well as product-specific base commands.
Ubiquitous commands
The module commands that are required to be implemented in all modules and that can thus be accessed from anywhere are
| Long name | Short name | Parameters | Description |
|---|---|---|---|
| list | ls | hidden/h:modules/m:commands/c:instances/i:instancecounts/ic:recursive/r | Lists all commands and modules under the current module depending on the parameters given; 'hidden' includes normally hidden commands, 'modules' includes any submodules, 'commands' shows commands, 'instances' shows data for each individual instance of a module, 'instancecounts' includes number of instances of each module, 'recursive' lists all child modules / commands. No parameters defaults to showing all commands and modules recursively with instance counts. It doesn't show per-instance data or hidden commands. |
| help | help | recursive/r | Shows a brief explanation of all commands and modules, shows the help for all submodules as well if 'recursive' |
| dumpdata | dump | recursive/r | Dumps all data saved for the current module, will list the data of all submodules as well if 'recursive' |
Base commands
Base commands are commands that always exist at the root in any implementation of the Ekdahl FAR.
| Long name | Short name | Parameters | Description |
|---|---|---|---|
| version | ver | - | Gets the current firmware version |
| debugprint | dp | command|usb|hardware|undefined|priority|error|inforequest|expressionparser|debug:1|0 | Turns on or off serial feedback for the given item |
| requestinfo | rqi | command | Retrives any data saved for a command, if applicable |
| saveallparameters | sap | - | Saves all avaliable parameters |
| loadallparameters | lap | - | Loads all avaliable parameters |
| resetallparameters | rap | - | Resets all saved parameters |
| reset | rst | 1|0 | Resets the Ekdahl FAR, conditional |
| nick | nick | name | Sets the nickname of this unit |
| nooperation | nop | - | Do absolutely, positively, nothing. Useful for testing and interfacing with computers, it's a good way to know that the unit is alive and responding since a "nop" is being returned as a response upon reception. |
| uservariable | uv | variable(0-9):value | Set user variable 0-9 to 'value' |
| expressionparserevaluate | epev | expression | Evaluates an arithmetric expression and sends back the output, all variables and functions that can be used in any command string can also be used here. Useful for testing expressions. |
| ifequal | ife | variable:comparator:truecommandstring:elsecommandstring | Performs [IF [variable] EQUALS [comparator]] then add [truecommandstring] to the que if TRUE, otherwise add [elsecommandstring]. |
| ifgreater | ifg | variable:comparator:truecommandstring:elsecommandstring | Performs [IF [variable] > [comparator]] then add [truecommandstring] to the que if TRUE, otherwise add [elsecommandstring] |
| ifless | ifl | variable:comparator:truecommandstring:elsecommandstring | Performs [IF [variable] < [comparator]] then add [truecommandstring] to the que if TRUE, otherwise add [elsecommandstring] |
| freeram | ram | - | Shows free RAM memory |
The base also contains the following modules:
| Long name | Short name |
|---|---|
| pluginhandler | ph |
The Ekdahl FAR stand alone single string unit
The Ekdahl FAR stand-alone single string unit offers these commands
| Long name | Short name | Parameters | Description |
|---|---|---|---|
| calibrateall | ca | - | Performs all calibration routines on the selected bow, see below for routines performed |
| calibratebowspeed | cbs | - | Finds the minimum and maximum bow speed of the selected bow |
| calibratebowpressure | cbp | - | Finds the minimum and maximum bow pressure of the selected bow |
| calibratemute | cmu | - | Calibrate mute settings |
| pickupstringfrequency | psf | - | Returns the fundamental tone calculated from the current audio signal if apliccable |
| pickupaudiopeak | pap | - | Returns the peak amplitude of the current audio signal |
| pickupaudiorms | par | - | Returns the RMS amplitude of the current audio signal |
The Ekdahl FAR also contains the following modules
| Long name | Short name |
|---|---|
| bowingwheel | bw |
| mute | mu |
| solenoid | so |
| controlbox | cb |
| midiconfigurationhandler | mcf |
The "bowingwheel"-module
The "Bowingwheel"-module contains everything needed to interface with a single bowing wheel. Each bowing wheel has its own harmonic series, pressure actuators and direct hardware interface. It contains the following commands.
| Long name | Short name | Parameters | Description |
|---|---|---|---|
| speedmode | sm | 0|1 | Bow motor speed mode, 0 = Automatic and 1 = Manual. Automatic mode means that the bowing wheel will automatically turn off after the motor timeout has been reached after being put into rest mode |
| motortimeout | mt | ms | Bow motor shutdown timeout after bow having been put into the rest position |
| pidenable | pe | 0|1 | Sets the bow PID on/off |
| motorfaultcommands | mfc | commands | Commands to execute when a motor fault is tripped - !WARNING! Can ruin your instrument if changed |
| motoroverpowercommands | moc | commands | Commands to execute when motor is over the power limit - !WARNING! Can ruin your instrument if changed |
The modules in the "Bowingwheel"-module are as follows
| Long name | Short name |
|---|---|
| bowpressure | bp |
| dcmotor | dcm |
| pid | pid |
| harmonicserieshandler | hsh |
The "bowpressure"-module
The "bowpressure"-module handles the pressure of the bowing wheel against the string. The "bowpressure"-module has the following commands
| Long name | Short name | Parameters | Description |
|---|---|---|---|
| baseline | ba | 0-65535 | Bow pressure baseline, modulation is added to this point upward. Typically this is set with a knob on the control box |
| modifier | mo | 0-65535 | Bow pressure modulation, added to the baseline |
| rest | rs | 0|1 | Puts the bow pressure in the rest position, conditional |
| engage | en | 0|1 | Puts the bow pressure in the engage position, conditional |
| stallpressure | sp | 0-65535 | Bow pressure stall/maximum position, this parameter is set using hardware positioning and is used as the absolute maximum for baseline and modifier combiner |
| engagepressure | ep | 0-65535 | Bow pressure touch/minimum position, this parameter is set using hardware position and is used as the starting point for when both the baseline and modifier is set to zero |
| restpressure | rp | 0-65535 | Bow pressure rest position, this parameter is set using hardware positioning and is typically set to a point just below the string where it does not touch at all. The purpose of this is because while the actual hardware might be able to make the bow go even lower, that position might be far enough from the string that once engaged the bow may have so far to travel that there is perceptible latency. |
| engagespeed | es | 1- ~100 | Bow pressure movement speed when engaging or disengaging |
| modulationspeed | ms | 0.1 - 10 | Bow pressure movement speed while engaged |
| hold | hd | 0|1 | Sets bow hold (infinite sustain) on/off, conditional |
| home | hm | - | Homing bow, used at startup and in case of the bow loosing position |
| tmcinfo | tmi | - | Request statistical information from the TMC2209 stepper motor driver |
Note that the "stall", "engage" and "rest"-pressure positions mention something called hardware position. This means the entire available movement of the bowing jack. Because the very bottom and top end of the movement might not be musically useful and may even harm the instrument, the "baseline" and "modifier" commands parameters are scaled depending on these settings.
The "engage" and "modulation"-speed settings sets how fast the stepper motor that drives the pressure moves depending on whether the bowing jack is set to engage or not. The idea here is that while wanting to be able to minimize latency by engaging and disengaging from the string as quickly as possible, dynamic changes in the pressure while playing benefits from much smoother movements as the bowing wheel takes some time to catch up to varying amounts of friction.
The "bowpressure"-module contains one or more of the following modules
| Long name | Short name |
|---|---|
| actuatorhandler | ah |
The "actuatorhandler"-module
The concept of "actuators" came up as it is possible to have bowing wheels of different sizes and wanting to be able to switch quickly in between them, perhaps during mid-performance. Because a differently sized wheel will require different values for the above mentioned "stall", "engage" and "reset"-pressure, each actuator stores these values. Instead of having to manually change the previously mentioned values, simply selecting a new actuator will automatically load the values. The "actuatorhandler"-module is the handler of one or more "actuator"-modules.
The commands of the "acuatorhandler"-module are as follows:
| Long name | Short name | Parameters | Description |
|---|---|---|---|
| add | a | (name):(rest:engage:stall) | Add new actuator with the given name and parameters |
| remove | rm | actuatornumber | Remove bow actuator [actuatornumber] |
| count | c | - | Returns the amount of saved bow actuators |
The "actuatorhandler"-module contains one or more of
| Long name | Short name |
|---|---|
| actuator | ac |
The "actuator"-module
The "actuator"-module contains the following commands
| Long name | Short name | Parameters | Description |
|---|---|---|---|
| [index] | Selects the given actuator | ||
| name | na | string | Sets the actuator name |
| data | da | name:rest:engage:stall | Sets the actuator name, rest, engage and stall pressure |
The "dcmotor"-module
The "dcmotor"-module handles the direct raw control of the bowing motor and handles the reporting back of the current speed. It has the following commands:
| Long name | Short name | Parameters | Description |
|---|---|---|---|
| run | ru | 0|1 | Turns the motor off/on |
| pwm | pw | 0-65535 | Bow motor direct power in 16-bit PWM values, requires that the PID is turned off |
| voltage | vo | ~2 - 10V | Sets the voltage of the regulator powering the motor. Changes here can make the motor more responsive to certain frequencies but will also affect how well the PID works. !WARNING! CAN RUIN YOUR INSTRUMENT IF CHANGED |
| current | cu | float | Bow motor reported current use |
| currentlimit | cl | float | Bow motor current limit (A)- !WARNING! CAN RUIN YOUR INSTRUMENT IF CHANGED |
| powerlimit | pl | float | Bow motor power limit (W) - !WARNING! CAN RUIN YOUR INSTRUMENT IF CHANGED |
| frequency | fq | float | Bow motor reported frequency |
| emergencystop | es | ms (0-65535) | Immediately stops the bowing motor and doesn't allow it to start again until the cool down period given in the first argument has lapsed (milliseconds) |
| minpwm | ip | 0-65535 | Bow motor minimum PWM (for calibration) |
| maxpwm | xp | 0-65535 | Bow motor maximum PWM (for calibration) |
The "pidcontroller"-module
The "pidcontroller"-module is responsible for keeping the "dcmotor"-module at a certain frequency (given in Hertz). It takes the output of the motor frequency measurement and feeds it a PWM value that tries to make the speed constant regardless of the friction that the motor is enduring. To learn more about PID Controllers please see this wikipedia article. The module has the following commands:
| Long name | Short name | Parameters | Description |
|---|---|---|---|
| targetfrequency | tf | hertz | Sets the PID target frequency |
| ki | ki | float | Sets the Ki parameter of the PID |
| kp | kp | float | Sets the Kp parameter of the PID |
| kd | kd | float | Sets the Kd parameter of the PID |
| integratorerror | ie | float | Sets the lower threshold of error values for the PID integrator to ignore |
| reset | re | - | Resets the PID integrator and derivative |
| maxerror | xe | float | Maximum error to correct in each PID loop, essentially sets acceleration |
| peakerror | pe | float | Get latest PID peak error |
| motorspeedmax | msx | Hertz | Bow motor maximum speed limit |
| motorspeedmin | msi | Hertz | Bow motor minimum speed limit |
| measuretimetotarget | mtt | Hertz | Measure the time it takes to change from the current frequency to the target frequency, for testing purposes |
The "harmonicserieshandler"-module
The "harmonicserieshandler"-module is responsible for sending frequency data to the "pid"-module. It handles calculating the correct frequency of the bowing wheel according to the selected harmonic and harmonic shift per the currently selected harmonic series. The "harmonicserieshandler"-module has the following commands:
| Long name | Short name | Parameters | Description |
|---|---|---|---|
| fundamental | fu | Hertz | The fundamental frequency of the string, all harmonics are calculated from this number |
| harmonic | h | int | Selects the harmonic number to set the bowing wheel to. A ratio is taken from the given harmonic in the current harmonic series, the ratio is then multiplied by the fundamental frequency |
| harmonicadd | ha | int | This number is added to the current harmonic |
| harmonicbase | hb | int | Same as harmonic but where the harmonic number is based on a MIDI note given by basenote |
| basenote | bn | 0-127 | Sets the MIDI base note of the bowing wheel, used in conjunction with "harmonicbase" |
| shift | sh | -32767 - 32767 | Sets shift from the currently playing harmonic where 32767 equals the entire harmonic shift range shifted up |
| shiftrange | sr | 0-36 | Set the number of harmonic numbers that constitutes an entire harmonic shift |
| shift5 | sh5 | -32767 - 32767 | Sets the shift from the currently playing harmonic over 5 octaves where 32767 equals 5 octaves shift up from the fundamental |
| add | a | (name):(ratios) | Add a new series with the given name and parameters |
| remove | rm | series | Remove the series given and shift any series accordingly. Cannot remove all series |
| count | c | - | Returns the number of harmonic series in the list and their IDs |
The "harmonicserieshandler"-module contains at the very least ONE harmonic series, by default it contains two: one for equal temperament and one for just intonation. The current series can be selected by simply indexing the "harmonicseries"-module without a command, e.g. "harmonicserieshandler.harmonicseries[1]". To be consistent, these are the modules in the "harmonicserieshandler"-module:
| Long name | Short name |
|---|---|
| harmonicseries | hs |
The "harmonicseries"-module
The "harmonicseries"-module contains any number of ratios that comprises a scale, ratios are given in a standard format where a ratio of "1" is equal to the fundamental, "2" would be one octave up etc. A standard harmonic series contains 12 ratios following a just intonation scheme. The "harmonicserieshandler"-module will automatically adapt to the currently selected harmonic series length, whether it's a standard 12-tone scale, some kinda 3-tone scale or a full on bananas 53-tone scale. The commands of the "harmonicseries"-module is as follows:
| Long name | Short name | Parameters | Description |
|---|---|---|---|
| [index] | - | - | Sets the currently selected harmonic Series |
| name | na | string | Sets the name of the harmonic series |
| data | da | name:ratios | Gets / sets all data for the harmonic series in the given slot with an arbitrary name as the first parameter. The length of the series is simply set to the amount of ratios given |
| ratio | r | harmonic:ratio | Sets the ratio of the given harmonic in current harmonic series, will increase the list size if needed to address the harmonic |
| remove | rm | harmonic | Remove the harmonic ratio given in the current series and shift any ratios accordingly. Cannot remove all ratios |
The "mute"-module
The "mute"-module works very similarly to the "bowpressure"-module in that it controls a stepper motor with some software limits in place in order to press the mute against the string. The commands are as follows:
| Long name | Short name | Parameters | Description |
|---|---|---|---|
| setposition | sp | 0-65535 | Set mute position |
| fullmute | fm | 0|1 | Puts the mute in full mute position, conditional |
| halfmute | hm | 0|1 | Puts the mute in half mute position, conditional |
| rest | rs | 0|1 | Put the mute in the rest position, conditional |
| savefull | sf | 0|1 | Save the current mute position as the full mute position, conditional |
| savehalf | sh | 0|1 | Save the current mute position as the half mute position, conditional |
| saverest | sr | 0|1 | Save the current mute position as the rest position, conditional |
| fullmuteposition | fmp | 0-65535 | Sets the full mute position according to the hardware position given |
| halfmuteposition | hmp | 0-65535 | Sets the half mute position according to the hardware position given |
| restposition | rp | 0-65535 | Sets the rest position according to the hardware position given |
| sustain | su | 0|1 | Sets the sustain off/on, this will keep the mute in the rest position even if a "fullmute"-command is given, lasts until "sustain" is set to "0". |
| backoff | bo | 0-65535 | Setting the time that the mute stays in the mutefullmute position before automatically going into rest, set in mS. A value of "0" disables backoff. This is used because if the mute is not backing off until something is attempted to be played, the backing-off time will either introduce latency or the string will be initially partially muted |
| home | hm | - | Home mute, used during initialization and if the mute were to loose position |
| hardwareposition | hwp | 0-65535 | Sets the hardware position of the mute instead of scaling it over the full mute and rest positions. Mainly used internally by other modules |
| completetask | cpt | - | Requests a callback when the current operation is finished. Only used internally by other modules |
| autocorrect | ac | 0|1 | Enables auto correct positioning that uses the homing sensor to correct positioning on the fly. EXPERIMENTAL |
| homingsensed | hms | - | Requests whether the homing sensor is currently active or not. Only used internally by other modules |
| movedirection | md | - | Requests the current direction of movement (0 Forward, 1 Reverse). Only used internally by other modules |
| currentstep | cs | - | Requests the current step. Only used internally by other modules |
| homingpoint | hmp | edgedirection | Requests the given homing point. Only used internally by other modules |
| homingstage | hms | - | Requests the current homing stage (UNHOMED, HOMED, FIRSTHOMINGRISING, SECONDHOMINGFALLING, SECONDHOMINGRISING, FIRSTHOMINGFALLING, MOVEPASTHOMESWITCH, MOVETOHOMESWITCH, GOTOOFFSET). Only used internally by other modules. |
| tmcinfo | tmi | - | Request statistical information from the TMC2209 stepper motor driver |
The "solenoid"-module
The "solenoid"-module currently controls the hammer of the Ekdahl FAR. Due to the fact that the very same module could be used for anything that uses a striking solenoid it was named as such. It has the following commands:
| Long name | Short name | Parameters | Description |
|---|---|---|---|
| engage | en | 0-65535 | Engages the solenoid using the first parameter as the force |
| rest | rs | 0|1 | Forces the solenoid to its rest position, conditional |
| maxforce | xf | 0-65535 | Set solenoid maximum usable force |
| minforce | if | 0-65535 | Set solenoid minimum usable force |
| forcemultiplier | fm | 0-65535 | Set solenoid force multiplier, useful for scaling of all incoming "engage"-commands |
| engageduration | ed | uS | Sets the duration of the solenoid hit in uS, if a value of 0 is set the solenoid will not disengage until a rest command has been given. WARNING!! HAVING THE SOLENOID ON FOR A SPAN OF SECONDS COULD DESTROY THE CIRCUITRY!! |
The "controlbox"-module
The "controlbox"-module communicates with an external control box and will issue associated commands whenever new values are read on the ADC-converters. It handles averaging and does some noise-cancellation functions on the values as well. The commands are:
| Long name | Short name | Parameters | Description |
|---|---|---|---|
| harmonic | har | command string | Sets the command string invoked when the harmonic knob or modulation changes |
| harmonicshift | has | command string | Sets the command string invoked when the harmonic shift modulation changes |
| finetune | fin | command string | Sets the command string invoked when the fine tune knob changes |
| pressure | pre | command string | Sets the command string invoked when the pressure knob or modulation changes |
| mute | mut | command string | Sets the command string invoked when the mute knob or modulation changes |
| hammerscale | hms | command string | Sets the command string invoked when the hammer scale knob changes |
| gate | gt | command string | Sets the command string invoked when the gate switch or modulation changes |
| hammertrig | hmt | command string | Sets the command string invoked when the hammer trigger modulation changes |
| controldefaults | cde | - | Reverts all ADC command strings to default values |
| datareturn | dr | channel:value | Sent when a new value is presented on one of the ADC channels, cannot be invoked. Triggers the commands associated with the channel |
| adcsetting | adcs | channel : averages : interrupterrorthreshold : continuouserrorthreshold : continuoustimeout | Sets ADC settings for a given channel. Averages are the number of samples to average, interruptthreshold is how much the value must change in order to issue a new value change event. continuousthreshold is how much the value must change when a previous change has already been recorded within the timespan of continuoustimeout |
| testadclatency | tal | 0-65535 | Start a ADC latency test |
| testadclatencyreturn | talr | - | Return from latency test |
| testadcminmax | tix | channel | Test min/max value for a given channel and resets the counter |
The "midiconfigurationhandler"-module
The "midiconfigurationhandler"-module handles a number of "midiconfiguration"-modules. It has the following commands:
| Long name | Short name | Parameters | Description |
|---|---|---|---|
| allnotesoff | ano | - | Clears the entire buffer of MIDI notes held |
| add | a | name | Adds a new MIDI configuration with the given name |
| remove | rm | int | Remove the specified MIDI configuration |
| count | c | - | Returns the number of MIDI configurations |
It contains one or more of the following
| Long name | Short name |
|---|---|
| midiconfiguration | mc |
The "midiconfiguration"-module
A "midiconfiguration"-module handles the reception of MIDI messages and will output the associated commands to the instrument internally. The commands are as follows
| Long name | Short name | Parameters | Description |
|---|---|---|---|
| [index] | - | - | Sets the currently selected MIDI configuration |
| name | na | string | Set the name of the MIDI configuration |
| noteon | non | commands | Sets the commands to execute at a MIDI Note On event |
| noteoff | nof | commands | Sets the commands to execute at a MIDI Note Off event |
| polyaftertouch | pat | commands | Sets the commands to execute at a MIDI Polyphonic after touch event |
| channelaftertouch | cat | commands | Sets the commands to execute at a MIDI Channel after touch event |
| pitchbend | pb | commands | Sets the commands to execute at a MIDI Pitch bend event |
| programchange | pc | commands | Sets the commands to execute at a MIDI Program change event |
| continuouscontrollerdata | ccd | controllernuber:commands | Sets the commands to execute at a MIDI Continuous controller event with the given [controllernumber] |
| removecc | rmc | controllernuber | Removes the entry associated with the MIDI continuous controller even controllernumber |
| defaults | d | - | Reverts the current configuration to default commands, values and CCs |
| receivechannel | rc | channel | Sets the MIDI receive channel of the current configuration. 1-16 sets specific channel, any other value for OMNI |
The "pluginhandler"-module
The Ekdahl FAR allows for plugins. These are modules that can trigger certain command strings to be executed either periodically or triggered by an incoming command. Further explanation of the given plugins is given below. The various plugins are handled by the "pluginhandler"-module, the different plugin modules are identified by their own unique ID. The "pluginhandler"-module it has the following commands
| Long name | Short name | Parameters | Description |
|---|---|---|---|
| add | a | pluginid | Add plugin with the given ID |
| remove | rm | pluginid:index | Remove plugin with the given ID and index |
| count | c | (pluginid) | Return the number of plugins of the given type, if none is given it returns all plugins |
The number of available plugins will differ from time to time as the plugin system has been purposefully designed to allow for anyone to write and add their own plugins. As of the current writing (2026-06-14) the number of possible plugin modules that can exist under the "pluginhandler"-module are
| Long name | Short name |
|---|---|
| lfo | lfo |
| ahdsr | ahdsr |
| numbermap | map |
| multiple | mlt |
The "lfo"-plugin module
The "lfo"-plugin module works like regular low frequency oscillator in that it generates a given waveform with a given frequency at a certain amplitude. In the Ekdahl FAR the distinguishing factors are that besides the common frequency, amplitude and waveform parameters, it also requires the use of a update rate and target parameter. The update rate sets how often the current position of the LFO is sampled (aka how often it peeks in on where the LFO is in its waveform transition at the moment), and each time that happens, the target commands are outputted to the instrument.
Example:
Lets set the waveform to "triangle", the amplitude to 65535 (max), the frequency to 1Hz (1 full waveform per second), the update rate to 10mS and the target to "bowingwheel.harmonicserieshandler.shift:lfoout". The output of the LFO is always given in the variable "lfoout", our target is set to "bowingwheel.harmonicserieshandler.shift" which controls the harmonic shift (pitchbend basically) of the bowing wheel. Since our update rate is set to every 10 milliseconds and our frequency is 1 Hertz the instrument will internally send 100 updates per second to the harmonic shift. Our amplitude is set to the maximum value and depending on the "harmonicserieshandler.shiftrange" this could give a smooth vibrato like sound or more of an experimental one with a wider range. If the modulation is too deep we can just adjust the amplitude of the LFO.
The "lfo"-plugin modules commands
| Long name | Short name | Parameters | Description |
|---|---|---|---|
| name | na | string | Sets the nickname of the LFO |
| enable | en | 0|1 | Disables / Enables the output of the target commands |
| target | tg | commands | Sets the command string to execute each update cycle, the string [lfoout] will be replaced with the current value |
| updaterate | ur | milliseconds | Sets the frequency with which the target commands are executed. Limited by the global maximum as set in the plugin handler |
| waveform | wf | sine|triangle|square|saw | Sets the LFO waveform |
| frequency | fq | Hertz | Sets the LFO frequency |
| amplitude | amp | 0-65535 | Sets the LFO amplitude |
| delay | dl | 0-65535 milliseconds | Ramps up the amplitude of the output waveform from zero to full amplitude in the given time span |
| resetdelay | rd | - | Resets the delay and starts the ramping of the waveform |
| resetwave | rw | - | Resets the waveform from the start (sync) |
| bipolar | bp | 0|1 | Sets whether the waveform is bipolar (default) or positive only |
The "ahdsr"-plugin module
The "ahdsr"-plugin module works like a standard ADSR with the addition of a "hold"-period in between the "attack" and "decay" phase. The FAR specific items are the same as outlined in the "lfo"-plugin module with the exception of the "releasetarget" which triggers once the AHDSR reaches zero. This is useful for doing things like automatically putting the bowing jack in the rest-position when used on the pressure for instance. The commands for the "ahdsr"-plugin module are
| Long command | Short command | Parameters | Description |
|---|---|---|---|
| name | na | string | Sets the nickname of the AHDSR |
| enable | en | 0|1 | Disables / Enables the output of the target commands |
| target | tg | commands | Sets the command string to execute each update cycle, the string [lfoout] will be replaced with the current value |
| updaterate | ur | milliseconds | Sets the frequency with which the target commands are executed. Limited by the global maximum as set in the plugin handler |
| gate | gt | 0|1 | Gate signal, [1] initiates the attack phase and if it reaches its maximum value, holds for the time given. It then continues through the decay down to the sustain point. A [0] initiates the release from whatever point the ADSR is at |
| attack | at | milliseconds | Attack time in milliseconds |
| hold | hd | milliseconds | Hold time in milliseconds |
| decay | dc | milliseconds | Decay time in milliseconds |
| sustain | su | 0-65535 | Sustain point in amplitude units |
| release | re | milliseconds | Release time in milliseconds |
| releasetarget | rt | commands | Commands to execute once the release has hit zero |
| amplitude | amp | 0-65535 | Output amplitude |
| invert | inv | 0|1 | Inverts the results and gives negative values |
The "numbermap"-plugin module
The "numbermap"-plugin module is used to "map" a incoming number to a different outgoing number. The idea of the Number Map is for instance to scale the volume of different overtones to be more even by modifying the bow pressure depending on what harmonic is being played. Another use case would be to group certain MIDI keys to address a certain string, and other MIDI keys addressing another, depending on the how well different strings can render certain tones / harmonics.
The Number Map first needs a data set of several points where each point contains "an input of x outputs y". The Number Map is then triggered with a value of x. When this happens it looks in its database for anything mapped to x, if it finds it it outputs the commands set by the target but first replaces any occurances of the word "nmout" in the command string with the value of y.
The "numbermap"-plugin modules commands
| Long name | Short name | Parameters | Description |
|---|---|---|---|
| name | na | string | Sets the nickname of the numbermap |
| target | tg | commands | Sets the commands to execute whenever the "numbermap"-plugin modules is triggered with a mapped value |
| data | da | (in:out)* | Set the map data in any number of pairs of [in] returns [out] |
| remove | rm | in | Removes the map with [in] if it exists |
| scale | sc | ? | Sets the overall scale of the Number Map |
| trigger | tr | in | Triggers the targets with the out number mapped to in if found |