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.
    • LindonL
      Lindon
      last edited by

      Well this looks like it's not on the top of christoph's list of things to fix (it's been broken a fairly long time now) so can anyone point me at the place in the source that (attempts to) handles Aftertouch?

      I will apply my vanishingly small C++ skills and break everything in an attempt to fix it...

      HISE Development for hire.
      www.channelrobot.com

      1 Reply Last reply Reply Quote 1
      • 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

                            56

                            Online

                            1.7k

                            Users

                            11.7k

                            Topics

                            101.8k

                            Posts