For smoothing parameter changes on devices that don’t have their own inertia setting (like the Filter device does).
I can instantly think of four situations where people will be glad of such a device. I’m sure there are many more! There is a certain similarity to them all, which might help you think in what ways the device could be useful to you.
You are an oldschool Tracker who doesn’t like graphical automation yet you want to be able to easily create ramps of effect parameters using pattern effect commands. At the new value in the pattern it will gradually change towards it, rather than a sudden jump, possibly removing the need for you to enter two values and interpolate between them (although the curve of the ramp is also different but it will be in most of these cases.)
You want to do a few small ramps in Automation (graphical) and creating a straight line, then extra point for each ramp and each plateaux can be time consuming. Instead stick the automation in Points mode and enter the new values where you want the ramps to start. (very similar to point 1 really!)
You want some random changes of a parameter using the LFO Device in Random/Noise mode but you don’t want these changes to be instantainious. Send it through this device (I believe it was mainly this suggestion, well adding Inertia to the LFO device, which brought the created of it with the Formula Device about.)
You are using Velocity to change values of a parameter live but don’t want the values to jump, partially as it can be an undesired effect, partly to help hide any imperfections in timing. With pad controllers now being so popular mapping velocity is more and more common. No reason you can’t use velocity from a traditional keyboard’s keys though.
The Inertia value will set how quickly the value changes to the new one set. This can obviously also be automated to give you different length ramps in output if you wish.
Excellent! Thank you for such a detailed answer; I can definitly see me using it
Stupid question, but… how do i use it?
Tried saving as “Song.xml” and zipping it into a .xrns file, doesn’t load.
Copy the xml-text (ctrl-c), focus dsp area in renoise, paste. It eats xml.
Nice tool! I have been totally oblivious to these things in renoise
Can this be saved inside a LUA script, so one could press a button and load this in? I’m trying to figure out how I could call the Formula Device with my usual “load native effect” or “load VST/AU effect” scriptage?
Here, have an upvote and a thanks.
I would love to, of course, understand it a bit more deeply as regards how the Formula Device can be hijacked to do actual LUA work.
Also, I’m totally vague on the aspect where the Formula Device could be used across multiple patterns, I can only see “LINE” and “LINEF” in ( What Is The Formula Device? )… the BEATS, TICK seem very complex to me.
Is there a way to print this kind of stuff in the LUA terminal to better be able to understand what kind of number crunching one would have to apply to use SEQPOS, BEATS or TICK, or TICKCOUNTER in a useful fashion?
You could instantiate the formula device via scripting, and then you could activate the preset afterwards?
But, AFAIK you’d have to (1) save the preset and (2) hardcode the preset index in your calling script.
Not pretty, but I think it would work.
I’m wondering how to hardcode the Formula Device into a script so i can press a key and load it. Loading a preset index would be childsplay compared to that
Thanks for this tool, it’s really useful!
Whoa, that is so cool! How could I have not known that this *Formula Device exists the whole time…
Someone asked whether you could make “something like a mass spring” with this… Behold the Spring Slider:
Click to view contents
<?xml version="1.0" encoding="UTF-8"?> <filterdeviceclipboard doc_version="0"><br> <deviceslot type="FormulaMetaDevice"><br> <isactive>true</isactive><br> <isselected>true</isselected><br> <selectedpresetname>Init</selectedpresetname><br> <selectedpresetismodified>true</selectedpresetismodified><br> <ismaximized>true</ismaximized><br> <customdevicename>Spring Slider</customdevicename><br> <formulaparagraphs><br> <formulaparagraph>doit(A, B*B, 1-C*C)</formulaparagraph><br> </formulaparagraphs><br> <functionsparagraphs><br> <functionsparagraph>curVelocity= 0</functionsparagraph><br> <functionsparagraph>function doit(target, velocity, damping)</functionsparagraph><br> <functionsparagraph> curVelocity= (curVelocity + (target - OUTPUT) * velocity) * damping</functionsparagraph><br> <functionsparagraph> return OUTPUT + curVelocity</functionsparagraph><br> <functionsparagraph>end</functionsparagraph><br> </functionsparagraphs><br> <inputnamea>Target</inputnamea><br> <inputnameb>Velocity</inputnameb><br> <inputnamec>Damping</inputnamec><br> <editorvisible>true</editorvisible><br> <panelvisible>1</panelvisible><br> <inputa><br> <value>0.314814806</value><br> <visualization>Device only</visualization><br> </inputa><br> <inputb><br> <value>0.27111119</value><br> <visualization>Device only</visualization><br> </inputb><br> <inputc><br> <value>0.179999962</value><br> <visualization>Device only</visualization><br> </inputc><br> <desttrack><br> <value>-1</value><br> <visualization>Device only</visualization><br> </desttrack><br> <desteffect><br> <value>0.0</value><br> <visualization>Device only</visualization><br> </desteffect><br> <destparameter><br> <value>1.0</value><br> <visualization>Device only</visualization><br> </destparameter><br> </deviceslot><br> </filterdeviceclipboard>
I love this. Apparently it’s been there since 2.6?! How come it never made it out of the “alpha” stage and into the Track DSP selection box?
It’s been known to crash. Renoise prides itself on being “rock solid” and if Taktik knows something can crash the app, and he can’t actually put the time in to fix it, he has nightmares and wakes up crying.
By hiding it, Renoise doesn’t officially support this. So, if you ruin your song by crashing it out of existence, it’s your fault.
Too nerdy. No one wants to have to answer support emails in an official capacity about this device.
I think you know the rest?
I just need a bouncing ball formula now, yay for physics based formulas
I wrapped this up into a tool for myself. It inserts a formula device to the right of the currently selected device. Get it here: https://dl.dropboxusercontent.com/u/4211304/com.afta8.InsertFormulaDevice_Rns280_V1.xrnx
You can also save formulas as presets and there are a few to collect around here. Happy days!
yeah, i got it sorted, and wrote something to show the documentation too in a popup window (then didn’t really know where to go and what to do with it )
Think it should be a native device.
I have adjusted the code from @kunitoki to work in Renoise 3.3.2
Copy the XML below, and paste it in the Renoise Track DSP lane.
Inertia Device for Renoise 3.3.2:
<?xml version="1.0" encoding="UTF-8"?> <FilterDeviceClipboard doc_version="0"> <DeviceSlot type="FormulaMetaDevice"> <CustomDeviceName>INERTIA</CustomDeviceName> <IsMaximized>true</IsMaximized> <IsSelected>true</IsSelected> <SelectedPresetName>Init</SelectedPresetName> <SelectedPresetLibrary>Bundled Content</SelectedPresetLibrary> <SelectedPresetIsModified>true</SelectedPresetIsModified> <IsActive> <Value>1.0</Value> <Visualization>Device only</Visualization> </IsActive> <FormulaParagraphs> <FormulaParagraph>OUTPUT - (OUTPUT - A) * power_inertia(B, 0.025, 0.5)</FormulaParagraph> </FormulaParagraphs> <FunctionsParagraphs> <FunctionsParagraph>function power_inertia(inertia, min, max)</FunctionsParagraph> <FunctionsParagraph>inertia = 1.0 - inertia</FunctionsParagraph> <FunctionsParagraph>inertia = inertia * inertia * inertia</FunctionsParagraph> <FunctionsParagraph>return min + inertia * (max - min)</FunctionsParagraph> <FunctionsParagraph>end</FunctionsParagraph> <FunctionsParagraph/> </FunctionsParagraphs> <InputNameA>INPUT</InputNameA> <InputNameB>STRENGTH</InputNameB> <InputNameC>C</InputNameC> <EditorVisible>true</EditorVisible> <InputA> <Value>1.0</Value> <Visualization>Device only</Visualization> </InputA> <InputB> <Value>1.0</Value> <Visualization>Device only</Visualization> </InputB> <InputC> <Value>0.0</Value> <Visualization>Device only</Visualization> </InputC> <DestTrack> <Value>-1</Value> <Visualization>Device only</Visualization> </DestTrack> <DestEffect> <Value>-1</Value> <Visualization>Device only</Visualization> </DestEffect> <DestParameter> <Value>-1</Value> <Visualization>Device only</Visualization> </DestParameter> </DeviceSlot> </FilterDeviceClipboard>