ADSR with per-stage ring mod?

Cool! Time permitting (which it won’t for a little while) if I have any ideas or insights I’d be happy to contribute.

I think even just the individual stage outputs is sorta neat, afaik no other EG’s in rack can do this. The button next to output will change whether or not it passes the unaffected envelope or the output with the modulation on the stage.

The global ring offset knob now acts as an attenuater on the output if no global ring input is connected too. This is probably a bit unintuitive, but it means that if the modulation is driving the output above 10V it can be scaled and that when a global ring input is connected the same knob controls the output’s base amplitude, so I think it makes sense.

also the per stage gates combined with the force advance inputs means it’s possible to self patch in order to skip a stage

Alright, I think I’ve hit my stopping point for the day. The Anger knob is partially working to do slow to fast crossfading between each modulation input for the boundries between stages, and it does make an audible difference.

Right now it’s set to morph from the attack modulation input to the decay modulation input by the end of the attack stage, from the decay mod in to the sustain mod in by the end of the sustain phase, and (ableit not working correctly) from the sustain mod in to the release mod in by the end of the release stage. That does leave a bit of awkwardness if the sustain stage is the only one being modulated, as it won’t have smooth transitions on either side. I’m having a hard time coming up with a good solution for this though.

I have the per-stage output mode switches working, so that each stage’s individual output can either be the raw envelope or with the modulation. I also added a context menu item for making the negative out output the basic envelope w/o modulation.

As for what’s left to go- the envelope stages are still only linear, I don’t have the different modulation modes implemented (only ring rn, no addition, enveloped addition, etc.), and the behavior of the cross fading between stages needs fixed for the release stage and probably largely modified overall to feel better to play.

https://github.com/VegaDeftwing/LyraeModules/tree/VegaADSR

2 Likes

I think I have this partially sorted out in the most recent commit. I forgot to make it crossfade with 0-modulation if the prior stages modulation input is disconnected. Still, it doesn’t behave exactly as I’d like as if a user only wanted to modulate sustain with that modulation bleeding into the decay and release stages to be smooth, the anger has to be extremely low, like within the first few percent of the knob’s range despite that range making sense for the other transition points. I’ll experiment with making the knob exponential latter to see if I can find a sweet spot that feels good for just sustain but still works for the other transition points with different inputs too.

I’ve started to get these. Right now the code is a mess of copy-pasta so that I can tweak things more easily and experiment. Some of the differences between modes are extraordinarily subtle while others are quite large. I still need to figure out if having consecutive stages in different modes breaks the way I’m crossfading and causes signal discontinuities.

I’ve got a nasty case of smooth brain and am having a hard time coming up with a way to handle this that doesn’t also affect the time each stage takes (making it exp shouldn’t make the stage shorter) but I also haven’t really tried all that hard.

I’ve been struggling for far too long to implement the curve on the decay stage. Release and attack log/lin/exp curve control works as you’d expect. The decay stage? Well, I went with a bezier curve.

image image image

Looking normal, right? Yeah, but the knob doesn’t enforce that:

imageimage

Now, I could totally fix this and scale the values so this knob behaves as you’d expect; however, I think I’m going to emrace the chaos and let this stay in- though I will probably make “Allow Weird Decay Shapes” a menu option and make the expected behavior the default.

2 Likes

I put in a bit more work today, I think it’s to the point where it’s ready for some testers. The code is pretty ugly, but users don’t care what’s behind the panel, right? ;p

1 Like

Here’s Linux and Windows builds. There’s definitely still some work to be done, but the module is fully functional (that is, I got all the core functionality working - every knob & button does its thing) but I’m sure there’s still some usability adjustments and feature additions left to go. For example, I’d like to add a right-click menu option to make the release gate actually be an EOR trigger.

If anyone has time to test it I’d really appreciate it!

1 Like

Nice! My Wednesday drone got rescheduled but I’m looking forward to testing all of these sometime this week.

By the way, while sort of on accident, my modules actually pair together quite well:

1 Like

Thaaaaaaaaat’s a cool waveform.

1 Like

That one was even reasonably similar for each stage, but it can get absolutely crazy:

image

1 Like

I’ve managed to get something similar with the DHE Boost Stage module.

That’s a cool module! I think the advantage of Vega (meaning the module, not the dev) is the prewiring of inputs and potential for intelligent transitions between stages that consider the point on the envelope AND the incoming modulation…

or the GPU in my system - a Vega56, or the Mortal Combat character, or the Star in the constellation Lyra, or the Chevy Vega, or the AI in the DOOM games, or the town in Georgia (US), Texas, Ohio, or the town in Alberta (CA), or the Turkish rock band, or the vegan product brand, …

I go by Vega IRL btw.

1 Like

I was definitely originally planning on that hold until both have a 0 crossing method, but ultimately I decided a simple crossfade was the most reasonable, so I’m not sure “Intelligent” is the right word, so much as just smooth.

1 Like

Hmm, so I got to thinking. I want this to be the sorta Zadar competitor for VCV, so I took a look at some of Zadar’s env’s and thought about what would be required to make them with Vega. Not all of them I think are applicable- Shape Master and BZEnvelope exist, and I’m not trying to make a module that does everything under the sun, but there are a few things I think that would make for good additions:

image

In this envelope, the modulation starts high then get’s attenutated with an inverse relationship respective to the envelope. This should be easy enough to impliment in code, and can already be done externally:

Next, I saw this one

image

and this to me looks like a ping’d filter being fed in as modulation. Currently, something similar is easy enough just by using a drum or something else that triggers on rising-edge but is left to decay despite being held high, but it does make me think having an option, even if in the right click menu, to output triggers instead of gates would be good. Of course, that leaves the question of if each trigger should be at the end or start of each stage. I think this is looking a bit like config hell, but I also don’t think hiding it away in the right click menu is unreasonable or that it would be hard to impliment all the options.

a fairly large number of banks look like they’re using S&H. I wonder if I should add a global S&H/SRR under the anger knob? The panel does look a bit awkward down there anyway, with the text being strangely far from the knob, so I think there’s plenty of room. If I do add S&H, I might also add a tiny slew control as well, because well,

image

This is feature creep, but again, it seems reasonable to me, so it’ll probably happen.

Finally, I think making the modulation attenuators be attenu-verters would make sense. Along those lines offset control would also be a nice to have, but feature creep is real and I have to draw the line somewhere… and frankly I just don’t have it in me to do yet another panel design.

oh, and before I get the bug report, I did find a div by 0 that I need to fix

if the decay stage is long enough that the sustain stage never happens and the sustain is 0 this happens

image

I’ll find it and fix it before the next release.

EDIT: it’s worse than I thought. Low sustain and longer than gate decay also means release curve is messed up too:

image

oops.

Did someone say Zadar in VCV? :slight_smile:

Your module looks very interesting Vega and I like it a lot but I think it’s quite different from Zadar (in a good way) - yours seems to mainly be (as thread title says) an ADSR with per stage modulation (which is something Zadar doesn’t do) and Zadar is all about warping/manipulating its banks of onboard vector shapes. ShapeMaster can be an ADSR with per stage modulation but it can be time consuming to set up like that whereas yours gives pretty much instant results (albeit with less flexibility and control over the range of modulations).

I’ve got a hardware Zadar and drew in some of my favourite shapes from there to SM (for personal use only). It can probably handle 90%+ of the Zadar shapes although the complex ones take a long time to draw in and I quickly lost the will to live doing it :slight_smile:

6 Likes

This has been fixed in the latest commit. I’ll make a new beta release later today

So, I did. It’s not fully integrated into the panel yet and I’m probably going to make tweaks, but when I went to do smoothing (slew after the s&h) I realized that doing T&H instead would actually be pretty interesting and that slew could just be done by adding pretty much any external slew after the fact, while doing T&H like I’m doing internally would be very difficult, so the S&H works, with a Sampling frequency knob, as expected. Then the to-be-renamed-on-the-panel smooth knob sets a sort of tracking pulse width, from 0%→plain S&H to 100%→The S&H does nothing (100% tracking). This can get some interesting lo-fi esque envelopes really quickly, so I think it’s a good addition.

I think It’ll just be a global all stage gates are trigs checkbox, as while I could make it more granular, it would be a bit annoying to set, and it’s not a big deal for users to just put a trig to gate converter on the stage where a gate is needed. I will make EOR able to be a trigger that overrides the release gate output independently though. I’m not adding EOA, EOD, or EOS triggers at EOA=SOD, EOD=SOS and EOS=SOR, so just making each output start of stage triggers sholud be fine.

I’m still planning to do this, but It’ll take some thinking about other modes too. While originally the idea was only for ring mod, I think having addition of various flavors like this is just as useful, so I want to be sure I’m making enough modes to be useful without putting in so many that cycling though them is annoying.


A little teaser:

image

1 Like