Can someone explain this recursion?

  • Hey!


    I've been looking at a synth patch that includes this routing: [Blocked Image: http://i.imgur.com/n0A8J.png]


    Can anyone explain to me how this works? Obviously the filter envelope is routing back to "Filter Env Slope", but is there some way to intuitively understand the result of this feedback?


    Thanks!
    -W

  • It's used to turn a straight line envelope slope into a curve. It depends on the initial value for that envelope segment as well, but I Imagine that in this case that value was close to 0. The purpose of this positive feedback is to make the sustain slope steeper with time (either loudening or softening, depending on the sign of the initial value).

  • Gotcha.


    Is there any reason this isn't just a parameter in the envelope section itself? Most softsynths allow the envelope to be curved without having to recurse.

  • Indeed, on many softsynths curving an envelope stage is a parameter in the envelope itself. By using the modulation matrix, the virus offers some flexibility though:


    Modulating, for example, filter decay rate by the filter envelope allows for snappier decay rates, but negative modulation also allows for more convex behaviour. So positive or negative modulation allows for both concave and convex curves.


    On top of that, every source in the modulation matrix can be used to modulate the depth of another slot in the matrix. In the above example, one could use a tempo synced lfo which modulates wether the decay rate modulation is positive or negative, allowing for a tempo synced change from convex to concave decay slopes.


    Also, lfo' s can modulate their own modulation depth, their own amplitude, their own speed, etc. etc.



    By using the modulation matrix for recursive stuff an enormous amount of flexibility emerges since such an approach is more generic than using dedicated parameters.



    Observe:



    lfo 1 is modulating the depth of lfo 2 which modulates speed of lfo 1 which modulates depth of lfo 3 which modulates both filter cutoff and lfo 2 and 3 speed.



    On the virus the above insanity is possible. On most softsynths it is not.



    M.

  • lfo 1 is modulating the depth of lfo 2 which modulates speed of lfo 1 which modulates depth of lfo 3 which modulates both filter cutoff and lfo 2 and 3 speed.

    Handy. I'm a programmer and I work primarily in functional languages, so this form of recursion is familiar to me.


    OTOH, how in the hell do you mentally picture the result of this interaction? Is this something that's intellectually achievable, or is it only practical to suck it and see?

  • Handy. I'm a programmer and I work primarily in functional languages, so this form of recursion is familiar to me.


    OTOH, how in the hell do you mentally picture the result of this interaction? Is this something that's intellectually achievable, or is it only practical to suck it and see?


    I may be wrong, but Isn't it simply a first order differential equation?
    You're basically saying "slope = k * function", thus the result is an exponential.

  • I may be wrong, but Isn't it simply a first order differential equation?
    You're basically saying "slope = k * function", thus the result is an exponential.


    I don't think so. Considering we're just modulating the release slope, we're starting with a linear equation:


    rs(t) = m*t


    Where rs is Release Segment, m is the Constant Slope and t is the time. Therefore the release segment is described, initially, as a simple straight line with certain slope.


    When we modulate the slope, we change the equation to:


    rs(t) = m(t)*t


    Where m(t) is a new function having the shape of the Filter Envelope. This Envelope (function) is the union of several (straight) lines (each with different constant slope) which are first degree polynomials of the form:


    fe(t)attack = me*t --------- for t from 0 to attack time


    fe(t)decay = me*t --------- for t from attack to decay time


    and so on...


    Having fe for Filter Envelope, me for the Constant Slope of the envelope and t for the time.


    So the resulting, modulated function, will be:


    rs(t) = me*t*t


    rs(t) = me*t²


    Which is a second degree polynomial: a parabola. However, this parabola will have different width over the time, depending on the slope for each specific segment on the Filter Envelope.


    The only fact I don't have clear in my mind is if the modulation will stop as soon as the Release segment starts. Otherwise, we would have complexities...