Some ideas about it. Just my ideas and made for consideration and discussion.
Step 1: Static simple math
Clicking a field and pressing special key brings up “Formula Editor”.
You can enter standard C style math there without any variables:
(10 + 20) / 6
When closing the formula editor the editor shows computed value. When
clicking it again it automatically brings up the formula editor.
Formula editor has a button “Save Statically” or something in the flavour
which removes the formula from memory and keeps only the computed value
converting the field back to standard value editor. Formula Editor is
automatically discarded when the value is set to real number without
any mathematic operators.
Operators:
±*/%()
All values should be treated as floats. If the field expects integer
the result is floored to nearest integer value 5.7 = 5 or rounded:
5.7 = 6
Step 2: Static advanved math
Brings in advanced math functions like:
cos, sin, tanh, etc.
Also constants like PI.
Step 3: Dynamic math
Brings in variables. Now the value is recalculated on every tick when
the formula contains some variable. When the formula doesn’t contain
any variables it’s calculated only on init and calculated value used
during the song.
First variables should be:
BPM - Beats Per Minute
LPB - Lines Per Beat
CurrentRow - Currently playing row
CurrentTick - Current tick in the row
CurrentPattern - Currently playing pattern number
CurrentOrder - Currently playing order number
TimeSinceStart - Time since the start of the song milliseconds
Step 4: Macros
Macros are formulas that have a name and are saved in song, under SongSettings.
Defining them looks like MacroName=MacroCode
By default there should be some macros available like:
BeatLength=(60000/BPM) // Beat length in milliseconds.
The macros can be skipped and made available as static variables in renoise.
Step 5: Advanced variables.
Access to track dsp’s and other variables. Like
DeviceId.ValueId (Filter3.cutoff / 2)
Returns the Filter3 cutoff position in same track DSP chain.
Or
TrackDSP[DevicePosition].ValueId
There should be a simple select field in the formula editor
just like in LFO device for example. Where you can select device and
the value. Only this doesn’t make connection in background but enters
the suitable variable text to Formula Editor.