1. IMPORTANT:
    We launched a new online community and this space is now closed. This community will be available as a read-only resources until further notice.
    JOIN US HERE

mb dynamics

Discussion in 'REAKTOR' started by Laureano Lopez, Aug 5, 2019.

  1. Laureano Lopez

    Laureano Lopez NI Product Owner

    Messages:
    416
    at this point, i would lie if i said i can hear the differences. maybe with extreme settings on certain materials, but not generally. i still want the thing to be as transparent as possible at a reasonable cpu load, because i pile them: i may have one on voice, one on guitar, one on drums, one on the master. something i didn't want this thing to have is a color of its own: i use it mainly as a fixing tool, to work on what's already there. the change from the blep-like thing to 2nd order attacks is simple: they start more smoothly from decay. instead of using 3 samples to change the curvature, i use half the attack time. this means less distortion. did i hear that distortion? not really, but when i play a project from 6 months ago with the new version, it sounds a bit better. that's not my metric though -i just made a smoother envelope. the change i made today is even less relevant. when i first made the allpasses i didn't know a reference topology, as i did for multimodes. so i just implemented the simplest realization of the transfer function. what i did today was to look for allpass topologies, implement a bunch of them, and take some measure of the noise they add. for that, i took some audio clip, ran the unit with no gains, reversed the clip, ran the unit again, reversed again, and mixed the result with the original clip inverted. what happens is that the group delay imposed by the first pass is undone by the second pass after reversing, so i'm left with something that's almost the original signal. whatever difference remains is the noise that's being added by the crossover network (actually twice it, because i ran two passes). i got into this because i was testing a balanced crossover tree to save allpasses (i finally ditched it, because it doesn't save any cpu), and in the process i tested a bottom-up tree (starting from the lowest instead of the highest band), and i found that it left the least residual noise of any version. i concluded this was caused by the allpasses, because the difference was largest at the lows, and for bottom-up there's no allpass to compensate for the lowest crossover (it already feeds the whole tree), but for top-down all bands get one except the first two, so the allpass was leaving more noise than the crossover. so i found the lattice topology, implemented four versions of it (transposed and non-transposed, with one or two multipliers), and checked their residual noise on different materials (white noise, drums, voice, guitar, full mixes). the two-multiplier version was consistently quieter, and transposed it left a more tilted, brown-ish noise, instead of the harsher, white-ish of non-transposed. here is the difference on a white noise clip (blue is now):
    noise.png
    does it matter? probably not -it was buried 85 db below the signal, now it's 110. but it was for free -somehow, it uses two more multipliers per filter but gives slightly lower cpu readings. i never refuse a free treat, so :D
     
  2. Catman Dude

    Catman Dude NI Product Owner

    Messages:
    761
    Hey, Laureano,
    The amazing thing is, I think I actually understood (to within 'pretty close') everything you said. I guess I had sort of intuited that you would only hear a difference if you screwed something up really bad. o_O
    But I hadn't thought about the possibility of moveable if not interchangeable parts, with respect to allpasses and multimodes and crossovers, etc.

    So my understanding I attribute to the very well documented website, text and pix, and from having gone code-diving several times, and noticing the structure of the bottom-up bands and the crossovers. It's interesting to think about the options of starting at the top and running the crossover network downward vs. the reverse, and not knowing what the results would be, until you had data enough to make the decision based on the level of noise-encroachment of the components.

    So where were you when Vadim was giving his workshop? You might have found it too easy, but I think if you had been in on it you would have helped carry the thing forward, and in the end you might have gotten lots of useful information from Vadim.
    I think if you want expert criticism of mb_dynamics, you should upload your current version to the VA Filter Workshop thread, addressing your post directly to Vadim. I expect he would receive a notification, and would be glad to know what you've done, and might even have some useful tips!
     
  3. Laureano Lopez

    Laureano Lopez NI Product Owner

    Messages:
    416
    i arrived late for the workshop -i started doing the exercises but hadn't reached the last page when it got stalled. it was weird, everyone was following until some day no one answered anymore heh.

    yep, the arrangement of crossovers is quite debatable. among commercial products i've seen some starting from the top and some from the middle, none from the bottom. intuitively i prefer the steepest slope for the bottom rather than the top end, so that goes for top-down. also, bottom-up makes detected levels more tilted for most inputs. but in the end i wasn't very sure, so following the ui without any remapping was the easy default.

    actually there are many debatable things, heh. some say linkwitz-riley shouldn't be used for the sidechain, and you should use two splitters, with butterworths for the sidechain and l-r for reconstruction. that's very expensive, so i dismissed it. same for the shape of the gain transfer function. there are many compressors with very particular curves -i went with something simple and symmetric. same for the envelopes too, if you consider a multistage attack or release. i didn't want to get in over my head with specificities -i don't know enough to make a design too dependent on hard-coded constants. i tried to make a coherent mechanism -something not very "custom", but complex enough to have a fairly specific response to different materials with the proper settings.
     
  4. colB

    colB NI Product Owner

    Messages:
    3,969
    Interesting you call it a 'blep like thing'. The reason I was looking through your code in the first place when all the discussions about macro naming started was because you mentioned using a blep, and I was wondering what for. Then when I found the blep macro, I couldn't find any calculations for the sub-sample position of the blep, so was wondering how it was being used, but since you've removed it, I suppose it's a moot point anyway.

    I was really wondering what value a band-limited step would have in the context of an envelop where there are no cyclical waveforms, and ideally no discontinuities needing bandlimiting anyway. Some sort of smoothing filter seems like a much more appropriate device?
     
    • Informative Informative x 1
  5. Laureano Lopez

    Laureano Lopez NI Product Owner

    Messages:
    416
    well, yes to all. it was a (1st derivative) discontinuity what i was trying to address:
    01.png
    blue is the impulse response of the release filter, a 1-pole lowpass with peak detection. grey is the response of a 1-pole attack to the previous response. i was trying to address the corner at the start. so i thought of the jump in the blue curve as a step, and distributed it across 3 samples. the coefficients for that came from the integral of a triangle function, so it was "polyblep-like" in that there was a step, and it was smoothed using a poly approx to a sinc integral. of course as there's no period, there's no aliasing or sub-sample position. all this was a lapse, because the logical thing was to use an actual lowpass, but i had fixed in my mind that i didn't use 2nd order attacks because they overshot. i tested them a long time ago when i didn't know enough, so i used butterworths. only after i wrote about it i thought wait, why is this thing here instead of a 2-pole lowpass, oh because they overshoot, oh but they don't if you set the right Q... oh. so the green curve is what we have now.

    i like these lapses though. i learned about blits and bleps and blamps, and made an elegant implementation of this dumb idea :D -it gave me a concept of how to solve similar things.
     
    Last edited: Aug 20, 2019
    • Like Like x 3