HISE Logo Forum
    • Categories
    • Register
    • Login

    Monophonic Aftertouch....

    Scheduled Pinned Locked Moved C++ Development
    12 Posts 3 Posters 527 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.
    • d.healeyD
      d.healey
      last edited by

      I'm guessing ControlModulator.cpp line 226 - I use Atom to search for any references to "After Touch" and this one seems the most relevant but there are plenty of others.

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

      LindonL 1 Reply Last reply Reply Quote 0
      • LindonL
        Lindon @d.healey
        last edited by Lindon

        @d-healey thanks - I'll take a look..."I'm just going outside, I may be some time..."

        HISE Development for hire.
        www.channelrobot.com

        LindonL 1 Reply Last reply Reply Quote 1
        • LindonL
          Lindon @Lindon
          last edited by

          Ok well...

          	const bool isAftertouch = controllerNumber == 128 && (m.isAftertouch() || m.isChannelPressure());
          
          	const bool isPitchWheel = controllerNumber == 129 && m.isPitchWheel();
          

          ....isnt this the wrong way round?

          Controller number 129 == Aftertouch doesn't it?
          and
          Controller number 128 == PitchWheel

          ..surely it cant be that simple?

          HISE Development for hire.
          www.channelrobot.com

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

            @Lindon No idea, I thought the MIDI standard only went up to 127...

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

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

              JUCE has an isAftertouch() function, perhaps that will be useful - https://docs.juce.com/master/classMidiMessage.html#a08acde3017ba958b404f1b5e191c88e6

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

              LindonL 1 Reply Last reply Reply Quote 0
              • LindonL
                Lindon @d.healey
                last edited by

                @d-healey said in Monophonic Aftertouch....:

                @Lindon No idea, I thought the MIDI standard only went up to 127...

                nope it goes beyond that 128 and 129 at least are "usually" defined as Pitch Wheel and Mono afterTouch respectively...

                HISE Development for hire.
                www.channelrobot.com

                1 Reply Last reply Reply Quote 0
                • LindonL
                  Lindon @d.healey
                  last edited by

                  @d-healey said in Monophonic Aftertouch....:

                  JUCE has an isAftertouch() function, perhaps that will be useful - https://docs.juce.com/master/classMidiMessage.html#a08acde3017ba958b404f1b5e191c88e6

                  • yep I can see where Christoph has used these calls but in the code itself the bool logic looks wrong.. I think he's checking that the CC Message Number = 128 and then attempting to do the afterTouch processing if this is true - which is wrong I think, it should check if cc# = 129....

                  HISE Development for hire.
                  www.channelrobot.com

                  LindonL 1 Reply Last reply Reply Quote 0
                  • LindonL
                    Lindon @Lindon
                    last edited by

                    @Christoph-Hart - am I on the right track with this?

                    • if so it seems a bit of an imposition(on you) to have me jump through the git push/pull authorisation process for this very very small change... more than willing to give it a go... but I will need hand holding a bit...

                    HISE Development for hire.
                    www.channelrobot.com

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

                      David is the master of this process, but I think you just need to fork HISE, make your changes and then create a pull request that I have to accept.

                      But before you do so, you also need to sign that contract:

                      http://hise.audio/download/HISE_CLA.pdf

                      It's a common procedure in open source software, but it's required so that the dual licensing of HISE isn't jeopardized - it basically just transfers the right of use of your contributions to me and is as unintrusive as possible.

                      LindonL 1 Reply Last reply Reply Quote 0
                      • LindonL
                        Lindon @Christoph Hart
                        last edited by

                        @Christoph-Hart - ok cool that looks simple enough...

                        HISE Development for hire.
                        www.channelrobot.com

                        LindonL 1 Reply Last reply Reply Quote 0
                        • LindonL
                          Lindon @Lindon
                          last edited by Lindon

                          @Lindon - well it looked too good to be true - and it was...
                          so I:

                          forked the latest MASTER

                          • changed the code I thought needed changing in ControlModulator.cpp

                          to this:

                                  const bool isAftertouch = controllerNumber == 129 && (m.isAftertouch() || m.isChannelPressure());
                          
                          	const bool isPitchWheel = controllerNumber == 128 && m.isPitchWheel();
                          
                          	if(isAftertouch || m.isControllerOfType(controllerNumber) || isPitchWheel)
                          	{
                          		if (m.isController())
                          		{
                          			inputValue = (float)m.getControllerValue() / 127.0f;
                          		}
                          		else if (controllerNumber == 128 && m.isPitchWheel())
                          		{
                          			inputValue = (float)m.getPitchWheelValue() / 16383.0f;
                          		}
                          		else if (m.isChannelPressure())
                          		{
                          			inputValue = (float)m.getChannelPressureValue() / 127.0f;
                          		}
                          		else if (m.isAftertouch())
                          		{
                          			const int noteNumber = m.getNoteNumber();
                          
                          			polyValues[noteNumber] = (float)m.getAfterTouchValue() / 127.0f;
                          
                          			inputValue = FloatVectorOperations::findMaximum(polyValues, 128);
                          
                          			jassert(inputValue != -1.0f);
                          
                          			if (inputValue < 0.0f) inputValue = 0.0f;
                          
                          		}
                          		else
                          		{
                          			jassertfalse;
                          		}
                          
                          		inputValue = CONSTRAIN_TO_0_1(inputValue);
                          		
                          		float value;
                          
                          		if(useTable) value = table->getInterpolatedValue(inputValue * (float)SAMPLE_LOOKUP_TABLE_SIZE);
                          		else value = inputValue;
                          
                          		if(inverted) value = 1.0f - value;
                          
                          		targetValue = value;
                          	}
                          
                          • basically just setting the midi controller numbers to their correct values in the boolean or statements at the top...

                          Sadly this makes no difference and I dont know how to get it to provide me with debugging information - the HISE debug build crashes out with errors...and even if it didnt I wouldnt know what to add in that was the same as Console.print("something") and I wouldnt know where to look even if I did...

                          So anyone got any clues, or is this back to @Christoph ?

                          It occurs to me that i should remove any possibility that its my hardware doing this (an Arturia KeyLab) so can anyone else please run this wildly simple snippet:

                          HiseSnippet 677.3ocsUs0aSCCE1tqdhVtHFhe.Q6oVwnJE1FH1CLVufpftUQFS71jmiaq0RribbFTg3+L+CfiSxVZGYSaQh7PUOmy2mymO2xDshwiiUZDtwwKh3H7iHdKjl48lSERzn9H7SHiowFt1Iy0AKhnwwbeDFu1GsNvMpiRe986OfFPkLdgKD5Dkfw+rHTXJ7NY+OIBBFR84GKBWB816Ohoj8TApDPOqQbQQT14zY7CoVX0HH75C7EFk1yPM7X.yAJ+EdyUeWlg+DQr3r.t0nKxCNnL2ndyEA9St7tFiP35SJt4qkcyeNYrvWbk+hLvSSC3TvX4b.t1pRp9JRp6MIogp.e6AbCxCuj7pmIuMHdLsHxTDwpsGRFIghyTJj1WVVYXQ0dFlzSAHjlNgzy4C0fwULZsqq6VN6351duoIRlQnjNJ4gJC+HYq1M+YyFM+USmqGZ5zRiYeMZUP.WmEFriUA7NQZgzzZLHYnR1YF2T.7vjvyrvcdgyluaS32RQcBMHg2pc68t1Kz17nuMozRld9a4bg8DtBHjQWsjs9cqjwxxiKATIGIElih341EE0tkTTQ4EB3eecTepgZqy49.bQbsQXkCtO+BXnIqp2fzmGetQEAiM+SKAzXp7SBnlU6Vsik4Af7wJsE1RuLVXVr7X68nE1szV3Rus2Q4tAYhvvlWtdqUhdgr1+a8luP3wjASmxYlBwVmL7aUc5+dHkunRLB4rwTiV7CDl.yIdvNQFGThTxCfWDAWy1QkY6ZssYFOtzO03OvSdvtVabdvtWFDERYZ0orrIE6JmGj5AzjLcaaCXsOX6zEkN8.7HtcbQgvlvSYLap3kf1Kmyqp.mWWANaWAN6TAN6VANuoBbd6sxw9QnOjXTgYiIfiICRWifwCjTnKKsiD8Wjb0bzI
                          

                          you should see the controller number and the reported value showing up in the console...where for me it shows

                          129:

                          HISE Development for hire.
                          www.channelrobot.com

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

                          48

                          Online

                          1.7k

                          Users

                          11.7k

                          Topics

                          101.8k

                          Posts