HISE Logo Forum
    • Categories
    • Register
    • Login

    C++ API: How to connect Intensity to a Slider?

    Scheduled Pinned Locked Moved C++ Development
    20 Posts 4 Posters 2.0k 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.
    • Christoph HartC
      Christoph Hart
      last edited by

      Have you pulled the latest scriptnode?

      hisefiloH 2 Replies Last reply Reply Quote 1
      • hisefiloH
        hisefilo @Christoph Hart
        last edited by hisefilo

        @Christoph-Hart mmmm nope!!! I was using Master to work with the C++ API. Should I jump to Scriptnode?

        d.healeyD 1 Reply Last reply Reply Quote 0
        • d.healeyD
          d.healey @hisefilo
          last edited by d.healey

          @hisefilo said in C++ API: How to connect Intensity to a Slider?:

          @Christoph-Hart mmmm nope!!! I was using Master

          You've been in the stone age!

          Libre Wave - Freedom respecting instruments and effects
          My Patreon - HISE tutorials
          YouTube Channel - Public HISE tutorials

          hisefiloH 1 Reply Last reply Reply Quote 1
          • hisefiloH
            hisefilo @d.healey
            last edited by

            @d-healey I'm on lastest scriptnode for non-C++ API projects! :)

            1 Reply Last reply Reply Quote 1
            • hisefiloH
              hisefilo @Christoph Hart
              last edited by

              @Christoph-Hart got it working!!! Thanks a lot @Christoph-Hart
              Now I'm working on replicating HiSlider stuff for the juce::Slider we are using. (MidiLearn, and LookAndFeel)

              Screen Shot 2021-03-13 at 10.07.31 AM.png

              hisefiloH 1 Reply Last reply Reply Quote 0
              • hisefiloH
                hisefilo @hisefilo
                last edited by hisefilo

                @Christoph-Hart it's possible to tweak HiSlider to receive Intensity? Will be much easier than adding Midilearn and flaf to Juce slider?

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

                  Yes that‘s a valid point.

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

                    Ah damn, I just noticed that it's super hard to MIDI learn the intensity - the entire system uses a parameter index and the intensity is not a parameter so the HiSlider is the smallest problem.

                    One option would be to write a MIDI processor class that uses one slider and forwards this to the intensity that you need - it's super verbose for a simple task though...

                    class IntensityForwarder: public HardcodedMidiProcessor
                    {
                        IntensitySlider(MainController* mc, const String& modId):
                          HardcodedMidiProcessor(mc, "IntensityForwarder")
                        {
                            modToUse = dynamic_cast<Modulator*>(ProcessorHelpers::getFirstProcessorWithId(mc->getMainSynthChain(), modId));
                            jassert(modToUse != nullptr);
                    
                            // Add one slider that will forward the value to the intensity.
                            Content.addSlider("modIntensity", 0, 0);
                        }
                    
                        // add all callbacks
                    
                        void onControl(var c, var value)
                        {
                            modToUse->setIntensity((float)value);
                        }
                     
                        WeakReference<Modulator> modToUse;
                    };
                    
                    
                    // creation:
                    
                    raw::Builder b;
                    b.createTheModulatorYouWantToControlBeforeTheOtherOne();
                    b.create<IntensityForwarder>(mc->getMainSynthChain(), whateverParameters);
                    
                    raw::UIConnection::Slider<0> c; // connect it to the IntensityForwarder
                    

                    This is pseudo code and will definitely not work, but it should get you started.

                    hisefiloH 2 Replies Last reply Reply Quote 0
                    • hisefiloH
                      hisefilo @Christoph Hart
                      last edited by

                      @Christoph-Hart Thanks !!!!!!! Working on it. Will post results!

                      1 Reply Last reply Reply Quote 0
                      • hisefiloH
                        hisefilo @Christoph Hart
                        last edited by

                        @Christoph-Hart
                        cannot get it working. Compiles, runs but onController never gets executed.

                        This is what I did:
                        Changed HardcodedMidiProcessor to HardcodedScriptProcessor because does not exist.
                        Changed Modulator for LfoModulator since Modulator does not have setIntensity

                        class IntensityForwarder: public hise::HardcodedScriptProcessor
                        {
                            
                        public:
                            
                            /** Set the name and default ID of the processor. */
                            SET_PROCESSOR_NAME("IntensityForwarder", "IntensityForwarder", "IntensityForwarder");
                            
                            IntensityForwarder(MainController* mc, const String& id, const String& modId):
                            HardcodedScriptProcessor(mc, id, mc->getMainSynthChain())
                        
                            {
                                
                                modToUse = dynamic_cast<LfoModulator*>(ProcessorHelpers::getFirstProcessorWithName(mc->getMainSynthChain(), modId));
                                jassert(modToUse != nullptr);
                                
                                // Add one slider that will forward the value to the intensity.
                                Content.addKnob("modIntensity", 100, 100);
                            }
                            
                            // add all callbacks
                            
                            void onControl(var c, var value) 
                            {
                                std::cout << "on Control" << std::endl;
                                modToUse->setIntensity((float)value);
                            }
                            
                        private:
                            
                            WeakReference<LfoModulator> modToUse;
                            
                            JUCE_DECLARE_WEAK_REFERENCEABLE(IntensityForwarder);
                        
                        };
                        
                        
                        

                        then I had to build it using add, instead of create

                        builder.add<IntensityForwarder>(new IntensityForwarder(mc, "IntensityForwarder1", "LfoGain"), mc->getMainSynthChain(), raw::IDs::Chains::Midi);
                        

                        and lately conected it using this:

                        sliderForwarder.connect("IntensityForwarder1");
                        
                        template <int ParameterIndex>
                        class StrippedSlider : public hise::HiSlider,
                        	public ControlledObject
                        {
                        public:
                        
                        	StrippedSlider(MainController* mc, const String& name) :
                        		HiSlider(name),
                        		ControlledObject(mc)
                        	{
                        		raw::Pool pool(mc, true);
                        //        flaf.setFilmstripImage(pool.loadImage("Strip.png"), 100);
                                flaf.setFilmstripImage(pool.loadImage("StripBigNew.png"), 64);
                                flaf.setScaleFactor(0.3);
                        
                                
                        
                        		setName(name);
                        		setSliderStyle(Slider::RotaryHorizontalVerticalDrag);
                        		setLookAndFeel(&flaf);
                        		setTextBoxStyle(Slider::NoTextBox, false, 0, 0);
                        	}
                        
                        	~StrippedSlider()
                        	{
                        		connection = nullptr;
                        	}
                        
                          
                            
                        	void connect(const String& id)
                        	{
                        		auto p = ProcessorHelpers::getFirstProcessorWithName(getMainController()->getMainSynthChain(), id);
                        
                        		setup(p, ParameterIndex, Slider::getName());
                        		connection = new raw::UIConnection::Slider<ParameterIndex>(this, getMainController(), id);
                        		setLookAndFeel(&flaf);
                        	}
                        
                        	bool tempoSyncMode = false;
                        
                        	FilmstripLookAndFeel flaf;
                        	ScopedPointer<raw::UIConnection::Slider<ParameterIndex>> connection;
                        
                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post

                        22

                        Online

                        1.8k

                        Users

                        11.9k

                        Topics

                        104.0k

                        Posts