This may be crazy talk, but i’ve never seen anything like it in another package. At work i do 3d animation and compositing, and something i use a lot in animation is to modify parameters with expressions.
As an example, to make an object rotate constantly, i could do something like this:
myObject.rotateY = frame; where frame is a variable that, you guessed it, describes the frame number the animation was playing.
Alternatively, i could use myObject.rotateY = 360*sin(frame); which would spin rotateY back and forth a full 360 degrees in a sinus curve based on the frame parameter.
Now consider the interdependencies of parameters you can create with such expressions. You can have an object’s scale alter based on its velocity, or its proximity to another, or it’s position in a list of objects, or whatever, and that’s literally a fragment of the tip of the iceberg.
Imagine this:
You create a Filter2 device, and give it a name such as “myFilter” with an optional text input field. Then you create en Expression metadevice that is basically just a text box and scrollbar.
In this device you type the following:
myFilter.frequency = (songPosition/songLength)*100;
This would modulate the frequency of the filter from 0 to 100 from the beginning of your song to the end.
Now create a Distortion device, name it myDistortion
In your expression metadevice, add the following:
myDistortion.drive = 100*sin(myFilter.frequency);
This would modulate myDistortion’s drive between -100 and +100 (which you would again normalize down to 0-100, but i’m too lazy to write that here for the sake of this example) according to myFilter’s frequency, which is already being modulated by the expression we created earlier.
Another example would be something like this, a little more abstract in my mind right now:
You have an instrument called “breakbeat” in a track called “breaks”
breaks.pan = breakbeat.outSignal;
Those of you familiar with envelope followers know this would modulate the track’s pan according to the output level at that given moment sent from the breakbeat instrument.
This could let instruments alter parameters on tracks they aren’t even playing on, which could let you fake such things as compressor sidechaining etc.
This just popped in my mind so i don’t have a world of examples, but i really do believe this could be a tremendously powerful addition to the software, and would let those of us willing to take the extra hours out to learn the scripting language essentially create our own metadevices (to a certain extent).
As for the implementation i assume Renoise as it is is class instance based when it comes to dsp chains and whatnot, so logically each instance should already have variables “available” for such expressions.
Any thoughts on this?
- Andreas SJ
edit:
here’s an image describing the kind of device i’m trying to suggest
edit: sorry about that atrocious code highlighting i was rushing