<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[MPE data reading, Aftertouch...?]]></title><description><![CDATA[<p dir="auto"><strong>Question?</strong><br />
Does anyone know how to read Channel Aftertouch data? Message.getChannelAfterTouchValue() - not found in HISE-script?</p>
<p dir="auto">**</p>
<p dir="auto"><strong>Reading MPE data experiments</strong><br />
Here is few of my experiments to see what data Sensel Morph is sending in MPE mode (and a few AKAI MPK249 nonMPE devices outputs) and how to read it in HISE to later do some processing.</p>
<p dir="auto">I'm using Linux (Mint Cinnamon 20.1), so that may or may not pose some random problems.</p>
<p dir="auto"><strong>Reading MPE data summary</strong><br />
Press, z, aftertouch, pressure,... <em><em><strong>NotOK????????</strong></em>	see Experiment 3 and 7</em><br />
Glide, x, pitchbend, pitch, note bend, horizontal,... 	<em>OK! see Experiment 2</em><br />
Slide, y, CC74, vertical,... 	<em>OK! see Experiment 4</em><br />
Stroke, velocity,... 		<em>OK! see Experiment 8</em><br />
Lift, release velocity,... 	<em>OK! see Experiment 8</em></p>
<p dir="auto">**</p>
<p dir="auto"><strong>Experiment 1</strong> CC numbers sent in Sensel Morphs MPE mode</p>
<pre><code>function onController()
{ 
/* 
Moving/pressing/sliding finger on my MPE keyboard keys 
*/ 
Console.print(Message.getControllerNumber()); 
}
</code></pre>
<p dir="auto">Interface: 128<br />
Interface: 74<br />
Interface: 129<br />
Interface: 128<br />
Interface: 74<br />
Interface: 129<br />
Interface: 128<br />
Interface: 74<br />
Interface: 129<br />
Interface: 128<br />
Interface: 74</p>
<p dir="auto">Conclusions:<br />
CC #128 	Pitchbend OK! see Experiment 2<br />
CC #74 	MPE slide CC#74 (maybe initial value = 0 better (than 63), then slide up ...127 or init value 127 slide down to 0?) see Experiment 4<br />
CC #129 	PolyAftertouch, not ChannelAftertouch? see Experiment 7</p>
<p dir="auto">**</p>
<p dir="auto"><strong>Experiment 2</strong> Pitchbend</p>
<pre><code>function onController()
{ 
/* 
Pressing my MPE keyboard key and sliding quickly right and left
(2^14 =16384/2=8192, 14 bits) 
*/ 

if (Message.getControllerNumber() == 128) // initial value 8192, glide right/left increases/decreases =&gt; PitchBend range -8192 - +8192, 14 bits
{ 
Console.print(Message.getControllerValue() - 8192); 
} 
}
</code></pre>
<p dir="auto">before subtracting - 8192</p>
<p dir="auto">Interface: 8192<br />
Interface: 8193<br />
Interface: 8196<br />
Interface: 8200<br />
Interface: 8207<br />
Interface: 8218<br />
Interface: 8231<br />
Interface: 8247<br />
Interface: 8266<br />
Interface: 8291<br />
Interface: 8319<br />
Interface: 8355<br />
Interface: 8393<br />
Interface: 8459<br />
Interface: 8524<br />
Interface: 8589<br />
Interface: 8651<br />
Interface: 8708<br />
Interface: 8782<br />
Interface: 8845<br />
Interface: 8897<br />
Interface: 8936<br />
Interface: 8964<br />
Interface: 8979<br />
Interface: 8992<br />
Interface: 8991<br />
Interface: 8962<br />
Interface: 8899<br />
Interface: 8823<br />
Interface: 8737<br />
Interface: 8650<br />
Interface: 8537<br />
Interface: 8431<br />
Interface: 8326<br />
Interface: 8208<br />
Interface: 8100<br />
Interface: 8003<br />
Interface: 7912<br />
Interface: 7840<br />
Interface: 7790</p>
<p dir="auto">after subtracting - 8192</p>
<p dir="auto">Interface: 0<br />
Interface: 0<br />
Interface: 0<br />
Interface: 0<br />
Interface: 0<br />
Interface: 0<br />
Interface: 0<br />
Interface: 1<br />
Interface: 1<br />
Interface: 2<br />
Interface: 3<br />
Interface: 5<br />
Interface: 8<br />
Interface: 12<br />
Interface: 16<br />
Interface: 21<br />
Interface: 26<br />
Interface: 32<br />
Interface: 39<br />
Interface: 47<br />
Interface: 60<br />
Interface: 73<br />
Interface: 88<br />
Interface: 103<br />
Interface: 119<br />
Interface: 159<br />
Interface: 199<br />
Interface: 237<br />
Interface: 277<br />
Interface: 317<br />
Interface: 356<br />
Interface: 394<br />
Interface: 429<br />
Interface: 463<br />
Interface: 516<br />
Interface: 569<br />
Interface: 617<br />
Interface: 662<br />
Interface: 702<br />
Interface: 734<br />
Interface: 762<br />
Interface: 782<br />
Interface: 809<br />
Interface: 827<br />
Interface: 838<br />
Interface: 840<br />
Interface: 841<br />
Interface: 826<br />
Interface: 802<br />
Interface: 770<br />
Interface: 717<br />
Interface: 659<br />
Interface: 598<br />
Interface: 534<br />
Interface: 466<br />
Interface: 377<br />
Interface: 284<br />
Interface: 195<br />
Interface: 107<br />
Interface: 0<br />
Interface: -101<br />
Interface: -198<br />
Interface: -302<br />
Interface: -400<br />
Interface: -515</p>
<p dir="auto">Conclusion: Reading pitchbend values seems to work</p>
<p dir="auto">**</p>
<p dir="auto"><strong>Experiment 3</strong> CC129 = PolyAftertouch see Experiment 7</p>
<pre><code>function onController()
{ 
/* 
Pressing my MPE keyboard key with increasing/decreasing pressure
*/ 

if (Message.getControllerNumber() == 129) 

	{ 
	Console.print(Message.getControllerValue()); 
	} 
}
</code></pre>
<p dir="auto">Press and release<br />
Interface: 64<br />
Interface: 64<br />
Interface: 64<br />
Interface: 65<br />
Interface: 65<br />
Interface: 65<br />
Interface: 65<br />
Interface: 65<br />
Interface: 65<br />
Interface: 65<br />
Interface: 65<br />
Interface: 65<br />
Interface: 65<br />
Interface: 65<br />
Interface: 66<br />
Interface: 66<br />
Interface: 66<br />
Interface: 66<br />
Interface: 66<br />
Interface: 66<br />
Interface: 229</p>
<p dir="auto">Press and slide up/down<br />
initial contact 63<br />
63 - 127 slide up<br />
63 - 0 slide down<br />
229 when key released</p>
<p dir="auto">Conclusion: // initial value 64, slide up/down increases/decreases: 0 &lt;= 64 &lt;= 127, release value 229? confused - polyAT or ?</p>
<p dir="auto">**</p>
<p dir="auto"><strong>Experiment 4</strong> CC#74 value</p>
<pre><code>function onController()
{ 
if (Message.getControllerNumber() == 74) 
{ 
Console.print(Message.getControllerValue()); 
} 
}
</code></pre>
<p dir="auto">Interface: 63<br />
Interface: 63<br />
Interface: 64<br />
Interface: 64<br />
Interface: 64<br />
Interface: 65<br />
Interface: 66<br />
Interface: 66<br />
Interface: 67<br />
Interface: 69<br />
Interface: 70<br />
Interface: 71<br />
Interface: 73<br />
Interface: 75<br />
Interface: 77<br />
Interface: 79<br />
Interface: 80<br />
Interface: 82<br />
Interface: 84<br />
Interface: 86<br />
Interface: 88<br />
Interface: 89<br />
Interface: 90<br />
Interface: 91<br />
Interface: 92<br />
Interface: 93<br />
Interface: 93<br />
Interface: 93<br />
Interface: 93<br />
Interface: 92<br />
Interface: 92<br />
Interface: 90<br />
Interface: 89<br />
Interface: 87<br />
Interface: 85<br />
Interface: 83<br />
Interface: 80<br />
Interface: 78<br />
Interface: 75<br />
Interface: 73<br />
Interface: 70<br />
Interface: 67</p>
<p dir="auto">Conclusion: Initial value ca. 63, slide up/down increases/decreases: 0 &lt;= 63 &lt;= 127 (can be set to other modes with SenselApp)</p>
<p dir="auto">**</p>
<p dir="auto"><strong>Experiment 5</strong> AKAI MPK249 pitchwheel and modwheel</p>
<pre><code>function onController()
{ 
/* 
Operating my AKAI MPK249 pitchwheel=128 and modwheel=1 
*/
Console.print(Message.getControllerNumber());
}
</code></pre>
<p dir="auto">Interface: 128 <em>- pitchwheels CC#</em><br />
Interface: 128<br />
Interface: 128<br />
Interface: 128<br />
Interface: 128<br />
Interface: 128<br />
Interface: 1 <em>- modwheels CC#</em><br />
Interface: 1<br />
Interface: 1<br />
Interface: 1<br />
Interface: 1</p>
<p dir="auto">**</p>
<p dir="auto"><strong>Experiment 6</strong> AKAI MPK249 ChnAT/Poly AT</p>
<pre><code>function onController()
{ 
/* 
Pressing my AKAI MPK249 pad with Aftertouch set to: Chn or Poly =&gt; same result = 129 (keyboard part sends only channel aftertouch, pads can send also PolyAT) 
*/ 
Console.print(Message.getControllerNumber()); 
}
</code></pre>
<p dir="auto">Interface: 129<br />
Interface: 129<br />
Interface: 129<br />
Interface: 129<br />
Interface: 129<br />
Interface: 129<br />
Interface: 129</p>
<p dir="auto">**</p>
<p dir="auto"><strong>Experiment 7</strong> AKAI MPK249 pad Aftertouch set to: Poly or Chn</p>
<pre><code>function onController()
{ 
/* 
Pressing pad with Aftertouch set to: Poly or Chn
*/ 

if (Message.getControllerNumber() == 129)
{ 
Console.print(Message.getControllerValue()); 
} 
}
</code></pre>
<p dir="auto"><em>Pressing pad with Aftertouch set to: Poly</em></p>
<p dir="auto">Interface: 127<br />
Interface: 53<br />
Interface: 0<br />
Interface: 62<br />
Interface: 77<br />
Interface: 94<br />
Interface: 106<br />
Interface: 114<br />
Interface: 119<br />
Interface: 121<br />
Interface: 127<br />
Interface: 120<br />
Interface: 119<br />
Interface: 116<br />
Interface: 111<br />
Interface: 106<br />
Interface: 100<br />
Interface: 89<br />
Interface: 72<br />
Interface: 64<br />
Interface: 63<br />
Interface: 66<br />
Interface: 67<br />
Interface: 64<br />
Interface: 53<br />
Interface: 39<br />
Interface: 27<br />
Interface: 23<br />
Interface: 22<br />
Interface: 18<br />
Interface: 1<br />
Interface: 0<br />
Interface: 12<br />
Interface: 0<br />
Interface: 101<br />
Interface: 113<br />
Interface: 123<br />
Interface: 127<br />
Interface: 96<br />
Interface: 0</p>
<p dir="auto"><em>Pressing pad with Aftertouch set to: Chn</em></p>
<p dir="auto">Interface: 229  <em><em>- prints 229 with increasing pressure and stops when pressed</em>                          with enough force</em><br />
Interface: 229<br />
Interface: 229<br />
...<br />
Interface: 229   <em>- last one when pressure released</em></p>
<p dir="auto">Conclusion:<br />
Poly Aftertouch works as expected!<br />
<strong>Channel Aftertouch does not!!!</strong></p>
<p dir="auto">**</p>
<p dir="auto"><strong>Experiment 8</strong> Sensel Morphs Velocity and Release Velocity OK</p>
<pre><code>function onNoteOn()
{ 
Console.print("Velocity: " + Message.getVelocity()); 
} 

function onNoteOff()
{
Console.print("Release Velocity: " + Message.getVelocity()); 
}
</code></pre>
<p dir="auto">Interface: Release Velocity: 26<br />
Interface: Velocity: 127<br />
Interface: Release Velocity: 22<br />
Interface: Velocity: 39<br />
Interface: Release Velocity: 21<br />
Interface: Velocity: 23                                        <em>- hard to get velocities lower than that</em><br />
Interface: Release Velocity: 23<br />
Interface: Velocity: 48<br />
Interface: Release Velocity: 29<br />
Interface: Velocity: 49<br />
Interface: Release Velocity: 20<br />
Interface: Velocity: 47<br />
Interface: Release Velocity: 18                        <em>- releasing pressure very slowly</em><br />
Interface: Velocity: 60<br />
Interface: Release Velocity: 23<br />
Interface: Velocity: 41<br />
Interface: Release Velocity: 38<br />
Interface: Velocity: 66<br />
Interface: Release Velocity: 127 <em>- releasing pressure very fast</em></p>
<p dir="auto">**</p>
]]></description><link>https://forum.hise.audio/topic/4402/mpe-data-reading-aftertouch</link><generator>RSS for Node</generator><lastBuildDate>Wed, 22 Apr 2026 01:57:24 GMT</lastBuildDate><atom:link href="https://forum.hise.audio/topic/4402.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 08 Jul 2021 08:27:27 GMT</pubDate><ttl>60</ttl></channel></rss>