HISE Logo Forum
    • Categories
    • Register
    • Login

    Different filters to the positive and negative portions of the wave in SNEX

    Scheduled Pinned Locked Moved Scripting
    8 Posts 4 Posters 270 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
      last edited by

      The below is a basic waveshaper in SNEX.

      How can we add a high shelf filter to the positive part of the sound wave and a low shelf filter to the negative part?

      
      template <int NV> struct Wshpr
      {
      	SNEX_NODE(Wshpr);
      	
      
      
      float getSamples(float input)
      {
      	input = Math.tanh(input * 10.0f);
      	
      	return input;		
      }
      
      // Initialise the processing specs here
      void prepare(PrepareSpecs ps)
      {
      }
      
      
      
      // Reset the processing pipeline here
      void reset()
      {
      	
      }
      
      // Process the signal here
      template <typename ProcessDataType> void process(ProcessDataType& data)
      {
      	for(auto ch: data)
      	{
      		for(auto& s: data.toChannelData(ch))
      		{
      			s = getSamples(s);
      		}
      	}
      }
      
      // Process the signal as frame here
      template <int C> void processFrame(span<float, C>& data)
      {
      	for(auto& s: data)
      	{
      		s = getSamples(s);
      	}	
      }
      
      // Process the MIDI events here
      void handleHiseEvent(HiseEvent& e)
      {
      	
      }
      
      // Use this function to setup the external data
      void setExternalData(const ExternalData& d, int index)
      {
      	
      }
      	template <int P> void setParameter(double v)
      	{
      		
      			
      	}
      
      };
      
      

      develop Branch / XCode 13.1
      macOS Monterey / M1 Max

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

        Something like this:

        if(input >= 0){
        //apply positive processing
        }
        
        else{
        //apply negative processing
        }

        Dan Korneff - Producer / Mixer / Audio Nerd

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

          @Dan-Korneff

          Yes of course.

          There is a filter example in snippet browser, but I couldn't figure out how to add filter to sequence the processing like;

          waveshaper >>>> filter

          develop Branch / XCode 13.1
          macOS Monterey / M1 Max

          Dan KorneffD ustkU 2 Replies Last reply Reply Quote 0
          • Dan KorneffD
            Dan Korneff @orange
            last edited by

            @orange ahh... lemme take a look at the snip

            Dan Korneff - Producer / Mixer / Audio Nerd

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

              @orange Assuming you'll end up with two processing functions, probably something like

              for (auto& s: data[ch])
              {
                  s = processWaveshaper(s);
                  s = processFilter(s);
              }
              

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

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

                process both filters for each sample input (so that the internal filter state is updated) and then return only one of the processed values based on the input's value sign. But how are you avoiding signal inconsistencies when jumping from one to the other?

                orangeO 1 Reply Last reply Reply Quote 0
                • orangeO
                  orange @Christoph Hart
                  last edited by orange

                  @Christoph-Hart said in Different filters to the positive and negative portions of the wave in SNEX:

                  But how are you avoiding signal inconsistencies when jumping from one to the other?

                  I don't know if it's excessive not, but this inconsistency is what I was looking for :)

                  But somehow a basic snippet could be so helpful.

                  develop Branch / XCode 13.1
                  macOS Monterey / M1 Max

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

                    @orange Here's an example:

                    HiseSnippet 1549.3ocuV02SaaDF2FvsKYcSsR6emz8WUtqHZRgBkQaWgPxZzJgHLEUooIzg8Y7Ibtyx2Yfro9+6i09.rOL6av1yycNINjzWVzVopfumW+cOudrq0LQDK5TkfmkwzNNtK2OWFxTJYtia8iGlwbbuiWvPgNoUBkKb5tui6W6c.UoY4DKo8FlQUJVjiq6x+HRvs1JNle9qeXOZJUDxlPxw4DIOj8Z9.tdB09u7m3oocnQri4CpH8FuranTzRlJK.7rrWCmLZ3EzyY8nnXK447JpJww867Z7jMYrsVONJht95Qat4la+zs2X6lz3FaPOq4lauwi2XqG+zshcbuU6HtVlGnoZlxwck8jQCCRjWIrN3DtheVJCOzzI.7rkbGYZDdEQpNsR3oQiCTJHrsRkv1x1v123c.OhOl9jv2cMLHSznZ.zcoog2xSAulUgWiJvaNPxsBjVwBo64EDlyyzS3f34K85JfrYLExSUghUVG2+vqkDDPnWa.8BVmb3vXE72rQiUIvudvNwEhPMWJHRQOolcnv+A0+s50p+t5jaxJNdt7P2jKSSY4ykMVZj+gTzWTL3LV9pjKooErwBBW+oiodu+XZ0Tdn8VWQPonqfqOLiIdeEBNkgJ3q2zceplhIhRZfbYrbMGgf69rKg1.aZol29L0EZYFzHLSNCpVjQEoT8zkPXiVICHFLUdCSNBEWOrZi3+Y0UepP7dd845vj4iwklCFgH0+GXrra7q7ZGGyB0S.3Jdcd6muVu5ksdfOQmemxijNus4ba59cuIE3Y4rLZN6XY+T5PeEcPVJ6H.iqRNKUFdQ.+WYy1UjYgvdnD9gITgfkpVjlma8IGUZ9gSJGIKzbw4GP047qgtvdECBf45grVknCn4tD1CYO2.Oi0EAvRJyg+F9ojYS7raIyliXVo8qGSekL+BS5n7aG2aai8JSP9z3qA3yxUXwo6s8ZrF7OmcSSkW0RNHiWV1BIECs9xzgYIRAODIYkXDz2cfr.7ZI9gcRGS4oXcdPgBlVDcnH.D1rHDqy5IifutUGZHDXG1mpSv9EbdCTbxxWKbbQ5TXsZchcA3TrQqNZUoMvAfb.FMvEkfJ.ea3v5d6rekfc8oBjxTv4t.bxYqMg6rNupteDeuRkYe11C7Dz7uDBhZdsRAa2Mx4Dr1yL6Pp5wNuCOE1y.0LFyAU8WWNR06XJTygEUAo7HVde3UA3ocKh3RPKCKq13W6yUYPqydEvH.67AZNbEJ4NYD0wz7yY5YD3CB9630UcBxMjlNB+PUvdR4ECnl5uEaSvmitkAzvb4og1A.3k6KLTfZEgICWCdnGblzz4R6Eaxr5AvSXNMLbZSMihOdQUb8EUwMVTEexhp3lKphasnJ9zOth3KL2sPKGXmgAE48aaJBccaKvdGSerCCF4GAuq0t0AqUGSAZsKajbci43.9kv+XQx2No0+Q2nUcsjQObxYo+bEOMC5agMGjmwEZRuSdAQoyKB0janFtuInW62dZuC2us+MX9fcfkQ0dziH3yu3zTthQzIrQ63.IHvX1PEIgkypW6RIOZzRS+91+FX3mAa.qAdBr16JM4QLESeSqkwyXovn3pFLGEzeF8et8GRmtu931GEL5b8ZwoRpdjQeE+7jfDVZrukrZUBFOBSJsWNSWjKHpcHfIK0gj.JQTnVjXSnnDNFWOk4es7p+0VGVo8oY7pIC06wC7Xhuh7BBrAMFHM1kyb8AEAk1od8aJx3qvHILHwDhKeEgIIo3mKnokXcRwkFFehklijEq0wQpufTVLXn5eCt2mDAeUdEfpVk1bqfWB0Jg7bCy0fEB8vy1gt9Hvf.TsXYNwGEl+7F6P3OynC7wCeHd8Q6YEgBMg2mn9diw9Y9uXBNF10TfKlaHFCtF+fg.7+ip0lSffpHw3ppYhHH1ZM80uCJnuJiJdlIKtJHP0Pv7byAc2uKgcIzNOU2EDNhRYuBZDai77G+08IrYZQdiockql7pSsj.MSEYFWvtFt03cAQRo8AtsKIiIKeaxoJI.31ZPtHhc8L9LXTS83E4yMB0uLBA9a7Je+HYALgjbYEi9tcp637Oh1I.+.
                    

                    You "just" have to implement your filter algorithms and manage per channel integrators (ch arg)

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

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

                    8

                    Online

                    1.8k

                    Users

                    11.9k

                    Topics

                    104.0k

                    Posts