OK, so you don't have a keyboard with Poly Aftertouch!

I just stumbled onto an interesting plugin by accident. It is called “MidiConverter3” by “Insert Piz Here” and I think it is free. For those who don’t know what this plugin can do, let me give you an example…

I have a MIDI keyboard that can send Aftertouch but not Poly Aftertouch, so I can’t really use my Hydrasynth Desktop effectively as it needs Poly Aftertouch to really come alive! Unfortunately, I think most of our keyboards fall into this category. I solved the problem using GP and MidiConverter3!

OK, so let me showed what I did:

  1. I tried using the GP Midi filter but I couldn’t find a direct conversion to “Poly Aftertouch”. Maybe I just missed it. LOL!

  2. So, I used MidiConverter3 between my MIDI In Block and my MIDI Out block (going to my Hydrasynth Desktop). I told it to take any “Channel Pressure” it sees and convert it to “Poly Aftertouch” and don’t let any other notes pass thru. Easy Peasy - it worked!

  3. I wanted more control, so I created another instance of MidiConverter3 and told this instance to look for notes with a Velocity between 101 and 127 and convert them to “Poly Aftertouch” as well. Note* - PolyAT is another event added to the MIDI stream in additiion to the notes you play.

  4. Next, I merged the two MIDI streams (All notes with the PolyAT events) and sent them to my Hydrasynth Desktop. My Hydrasynth was happy and I was happy because I was sending PolyAT - Yay!

I suppose this could be handled with a Scriptlet but this solution seems to work. I will post the Rackspace/Gig File once we agree it is useful and once I figure out how to post it. :slight_smile:

1 Like

Take a look at this Forum entry
Polyphonic Pressure Generator

PPG looks very cool and I will give it a try. I follow Tim Shoebreidge and was surprised that I missed this one … LOL! I just downloaded PPG and Voltage Modular and will give it a try this evening. It looks like he added a few more controllers … as I only have two (velocity and channel pressure). I like the fact that you can use the CC64 to trigger the effect. For $19.00 you can’t go wrong. LOL! … that is if it works transparently in GP without sucking up a lot of resources.

Remember, my Rackspace was only a Proof of Concept and could easily be taken a bit further. I was also hoping, that GP would do this in a Script and then later make it a standard feature in a MIDI Block or MIDI Filter. :slight_smile:

Maybe my script is also working for you.

//$<AutoDeclare>
// DO NOT EDIT THIS SECTION MANUALLY
Var
   MIN : MidiInBlock
   nn  : Integer
   ptm : PolyTouchMessage
//$</AutoDeclare>

//Called when a NoteOn message is received at some MidiIn block
On NoteOnEvent(m : NoteMessage) from MIN
 nn = GetNoteNumber(m)
 SendNow(MIN,m)
End

//Called when a NoteOff message is received at some MidiIn block
On NoteOffEvent(m : NoteMessage) from MIN
 SendNow(MIN,m)
End

//Called when an aftertouch (channel pressure) message is received at some MidiIn block
On AfterTouchEvent(m : AfterTouchMessage) from MIN
 ptm = MakePolyTouchMessage(nn, GetAfterTouchValue(m))
 SendNow(MIN, ptm) 
End
1 Like

Your script looks good and should work OK. Now get David to make this a standard “MIDI Filter feature”.

Tim Shoebridge with his Voltage Modular/PPG plugin has obviously taken this conversion feature to a whole new level of control. I am going to play with all of the solutions and report my findings back to the group. Thanks for doing the script. :slight_smile:

There is no “standard” way to do this. For example you yourself noted that you used two separate algorithms

  1. Take any aftertouch and convert it to polytouch
  2. Convert notes with velocities higher than 100

The beauty of GP Script is you can create suitable algorithms for specific needs. Can’t do that with a “standard” MIDI filter.

Wouldn’t this be the perfect candidate for a Scriptlet? :wink: I love Scriptlets :nerd_face:

4 Likes

After playing around with various versions of PolyAT generators, I have discovered that Piano Paul’s Script works best for me … but as a scriptlet. Here it is as I translated the script into a scriptlet. In my scriptlet (Piano Paul’s code essentially), I added a 30 boost for more attenuation. You can change this value in the code or omit this portion of the code entirely. The only difference between the script and the scriptlet is that the scriptlet does not need to reference a MIDI block as it sits between a MIDI Block and a plugin or in my case a Hydrasynth Desktop. OK, here is the scriptlet code:

var nn  : Integer
var ptm : PolyTouchMessage
var aftertouchBoost : Integer := 30
var aftertouchValue : Integer


//Called when a NoteOn message is received at some MidiIn block
On NoteOnEvent(m : NoteMessage) 
 nn = GetNoteNumber(m)
 SendNow(m)
End

//Called when a NoteOff message is received at some MidiIn block
On NoteOffEvent(m : NoteMessage) 
 SendNow(m)
End

//Called when an aftertouch (channel pressure) message is received at some MidiIn block
On AfterTouchEvent(m : AfterTouchMessage) 
aftertouchValue := GetAfterTouchValue(m) + aftertouchBoost
ptm = MakePolyTouchMessage(nn, aftertouchValue)

 SendNow(ptm)
End

(edited by @schamass as mod: used the “code format” for better readability)

3 Likes

Something for the Gig and Rackspace FIles section of the forum ? :innocent:

2 Likes

You read my mind :slight_smile:
Already on it :beers:

EDIT:

Done: [Gig] Poly Aftertouch generator

3 Likes