HISE Logo Forum
    • Categories
    • Register
    • Login

    dry/wet mix on whole Effect Rack?

    Scheduled Pinned Locked Moved General Questions
    dry wetmixrack
    20 Posts 7 Posters 1.1k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • orangeO
      orange @Straticah
      last edited by orange

      @Straticah Here is a Saturation example with Mix knob:

      • Insert a snex_shaper node
      • Create a File & name it snex_shaper
      • Insert a Parameter (0 - 1 range) & name it Mix
      • Paste the below code to the snex file

      The Mix parameter will blend the Distorted & Clean signal together.

      template <int NumVoices> struct snex_shaper
      {
      	SNEX_NODE(snex_shaper);
      	
      	float Mix = 0.0f;
      	float a = 0.0f;	
      	
      	float getSample(float input)
      	{
      		//Store the clean input
      		a = input;
      		
      		//Waveshaper Transfer Function
      		input = 9.5 * (1.0 - 1.0/Math.exp(input));
      		
      		//Apply Mix Knob to blend Distorted & Clean Signal together				
      		return input * (1.0 - Mix) + a * Mix;
      	}
      
      	template <typename T> void process(T& data)
      	{
      		for(auto ch: data)
      		{
      			for(auto& s: data.toChannelData(ch))
      			{
      				s = getSample(s);
      			}
      		}
      	}
      	template <typename T> void processFrame(T& data)
      	{
      		for(auto& s: data)
      			s = getSample(s);
      	}
      	void reset()
      	{
      		
      	}
      	void prepare(PrepareSpecs ps)
      	{
      		
      	}
      	
      	void setExternalData(const ExternalData& d, int index)
      	{
      	}
      	template <int P> void setParameter(double v)
      	{
      		if (P == 0) Mix = (float)v;
      
      	}
      };
      
      

      develop Branch / XCode 13.1
      macOS Monterey / M1 Max

      StraticahS Dan KorneffD 2 Replies Last reply Reply Quote 2
      • StraticahS
        Straticah @orange
        last edited by

        @orange thanks a lot @orange :) will give this a try

        building user interfaces in HISE :)
        web: www.vst-design.com

        1 Reply Last reply Reply Quote 1
        • toxonicT
          toxonic
          last edited by

          .... and a Saturator based on Faust, if needed, with prefilter and post gain.

          import ("stdfaust.lib");
          lpF = hslider("[0]lowpass[scale:log]",20000,20,20000,1):si.smoo;
          hpF = hslider("[1]highpass[scale:log]",20,20,20000,1):si.smoo;
          drive = hslider("[2]saturation",35,0,50,0.01):ba.db2linear:si.smoo; 
          post = hslider("[5][0]post", -20,-40,0,0.1):ba.db2linear:si.smoo;
          mix = hslider("[6]mix",0.5,0,1,0.01):si.smoo;
          trig = button("trig");
          sat(x) = ma.tanh(x*drive):*(post);
          mixer(x,y) = x*mix,y*(1-mix):>_;
          t_sat_mono=_<:(fi.lowpass(2,lpF):fi.highpass(2,hpF):sat),_:mixer;
          t_sat_bypass = _<:select2(trig,_,t_sat_mono);
          process = sp.stereoize(t_sat_bypass);
          
          StraticahS 1 Reply Last reply Reply Quote 3
          • StraticahS
            Straticah @toxonic
            last edited by Straticah

            @toxonic do you have experience with faust and hardware modeled saturation like from analog gear? Decapitator from soundtoys does a great job, wondering how i would approch something like this ins HISE. :) PS: it is a tape saturation

            building user interfaces in HISE :)
            web: www.vst-design.com

            toxonicT ustkU 2 Replies Last reply Reply Quote 0
            • toxonicT
              toxonic @Straticah
              last edited by toxonic

              @Straticah oh, i'm afraid, i'm not! ;-) This here is just a simple hyperbolic tangent saturation, which is most of the time enough for my needs. I tried some other saturation stuff in the past, but that was just tinkering around....
              Edit: you can find several saturation algorithms in the internet, but it's not always trivial to adapt them to Faust or other environments.

              1 Reply Last reply Reply Quote 1
              • ustkU
                ustk @Straticah
                last edited by ustk

                @Straticah Ahhh... DSP... Unfortunately, we're all on the same boat, which is gathering information on DSP... But I'm afraid you'll never really find a consistent source of information that can explain an algorithm from start to finish. Yes, the secret is well kept, and the reason is that DSP guys are making their own algos which are the heart and strength of their revenues, and this after years (decades) of work, experiences and lab research...

                Yes, I have a quite dark vision on this but it is easy to understand why isn't it?

                Now, that been said, you can have a look at some books, they will give you the principles of the most famous effects, saturations included of course. The problem is that they often only scratch the surface, so don't expect to get a complete recipe, especially when considering analog emulation, trust me... The other problem with books is that they often tackle a specific environment, so you have to transpose those principles to your environment of choice (SNEX, FAUST, etc...)

                And when you find most advanced books, a great part of them is spent to explain the C++ programming more than the DSP principles themselves...

                There are communities too that are a great starting point to understand algos, but often again, they are scratching the surface of simple designs.

                Decapitator? Yeah! Definitely a great processor in there that I'd love to get inspiration from! But my guess is that it is a very advanced algorithm for my level.

                If you have an electronic background, this can definitely help since a DSP is generally derived from an analog circuit (be it real or not). The main difficulty with reproducing analog equipment is how components are interacting with eachother. A saturation is easy approchable using filter and shapers of all kind and combinations. This will give you something that works, but definitely not a good one (chances are it'll sound like old DSPs from decades ago) That is because in an electronic circuit, the saturation component have a backward effect onto the filter that precedes, and the filter on the rest too, and again, without talking about frequency and gain dependent impedances... This is very hard to derive and program. But FAUSt is made to deal with this and that's amazing. But still, that's just a part of the job and just replicating a circuit in FAUST will not make it sound as the original (I don't have the experience, but I'm confident in this...) because you need to adapt "by ear" and lab measures. Also, getting active component in FAUST might not be trivial, I don't know where we are with this now regarding OpAmps, transistors, etc...?

                Another thing I'd like to approach is that a lot of content about DSP are approaching the problem from a math point, so it is even harder to understand what to do with this, of course depending on your background!
                At least for me, understanding the math, FFT, how to code all this along with DSP algorithm, measure and give birth to a final and advanced project seems to be a long, very long journey I count in years decades. No, my version of Decapitator is not yet ready to make me famous :)

                This was just my two cents about how to get in the DSP world. In short, there is no ready made formula to make your own. You (and I) have to start at the beginning, read books, understand concepts, apply tiny things in minimal projects, compare, learn more here and there. It's a lifetime job!

                Can't help pressing F5 in the forum...

                Christoph HartC 1 Reply Last reply Reply Quote 6
                • Christoph HartC
                  Christoph Hart @ustk
                  last edited by

                  @ustk I wouldn't be so pessimistic and it's a bit gate-keepy to expect plugin developers to be DSP wizards in order to make good products. Sure in order to create a truly remarkable new DSP algorithm that stands out on its own you will need to get into nerd town and do these things, but it is not the only option.

                  If you combine a reasonably well sounding algorithm with a good UI and a use case that solves a real problem for some people it has a reason of existence and can be successful too. You just need to be creative and have a good sensor for what people actually need.

                  And if you really want to go down the route of making "the best sounding plugin" you can team up with DSP developers who despise making UIs.

                  ustkU 2 Replies Last reply Reply Quote 5
                  • ustkU
                    ustk @Christoph Hart
                    last edited by

                    @Christoph-Hart Good point!

                    Can't help pressing F5 in the forum...

                    1 Reply Last reply Reply Quote 0
                    • ustkU
                      ustk @Christoph Hart
                      last edited by ustk

                      @Christoph-Hart my intent is not to be pessimistic so I'm sorry if that's such the feeling in my post. I understand that small but powerful DSP (powerful in terms of answering a customer problem) can be developed without years of learning. And thanks to Hise and now Faust this will be more easily accessible than it ever was with any plateform or framework. Although (but you now better what products are created from Hise), synths (with DSP or no) and samplers are more accessible to create, while DSP effects in my opinion requires much more to learn in essence. And we can't hide that material about DSP development is either poor or too technical, intentionally or not…

                      But still I have good hope for me and others to see new nice releases shortly! :)

                      Can't help pressing F5 in the forum...

                      1 Reply Last reply Reply Quote 2
                      • Dan KorneffD
                        Dan Korneff @orange
                        last edited by Dan Korneff

                        @orange @Christoph-Hart
                        Completely unrelated to wet/dry... in a formula like @orange posted:

                        input = 9.5 * (1.0 - 1.0/Math.exp(input));
                        

                        It only affects the positive side waveform. Do you have any quick tricks to process +/- evenly with an equation like that?

                        sat_test.gif

                        Dan Korneff - Producer / Mixer / Audio Nerd

                        Christoph HartC orangeO 2 Replies Last reply Reply Quote 0
                        • Christoph HartC
                          Christoph Hart @Dan Korneff
                          last edited by

                          input = Math.sign(input) * 9.5 * (1.0 - 1.0/Math.exp(Math.abs(input)))
                          

                          It's just a random shot, but if you take the absolute value so that every input is positive and then use the sign function to invert negative inputs, it might work.

                          Dan KorneffD 1 Reply Last reply Reply Quote 2
                          • orangeO
                            orange @Dan Korneff
                            last edited by orange

                            @Dan-Korneff said in dry/wet mix on whole Effect Rack?:

                            @orange @Christoph-Hart

                            It only affects the positive side waveform.

                            Sorry it was just an example. This is a Logistic Sigmoid function, for both 2 sides you can process positive / negative portions separately like this:

                            if (input > 0.0) input = 9.5 * TrshPos * (1.0 - 1.0/Math.exp(input));			
                            else if (input <= 0.0) input = -1.0 * 9.5 * TrshNeg * (1.0 - Math.exp(input));	
                            

                            TrshPos & TrshNeg parameters are the Threshold values for + / - portions (0 - 1 range)

                            So if you also adjust the Threshold values, it should give this:

                            LogSigmoid.gif

                            develop Branch / XCode 13.1
                            macOS Monterey / M1 Max

                            Dan KorneffD 1 Reply Last reply Reply Quote 1
                            • Dan KorneffD
                              Dan Korneff @Christoph Hart
                              last edited by

                              @Christoph-Hart Impressive! You're hired.

                              Dan Korneff - Producer / Mixer / Audio Nerd

                              1 Reply Last reply Reply Quote 0
                              • Dan KorneffD
                                Dan Korneff @orange
                                last edited by

                                @orange said in dry/wet mix on whole Effect Rack?:

                                Sorry it was just an example.

                                No worries! I had a very convoluted equation going on and got lazy.

                                Dan Korneff - Producer / Mixer / Audio Nerd

                                1 Reply Last reply Reply Quote 1
                                • First post
                                  Last post

                                23

                                Online

                                1.7k

                                Users

                                11.8k

                                Topics

                                103.2k

                                Posts