MPE data reading, Aftertouch...?
-
Question?
Does anyone know how to read Channel Aftertouch data? Message.getChannelAfterTouchValue() - not found in HISE-script?**
Reading MPE data experiments
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.I'm using Linux (Mint Cinnamon 20.1), so that may or may not pose some random problems.
Reading MPE data summary
Press, z, aftertouch, pressure,... NotOK???????? see Experiment 3 and 7
Glide, x, pitchbend, pitch, note bend, horizontal,... OK! see Experiment 2
Slide, y, CC74, vertical,... OK! see Experiment 4
Stroke, velocity,... OK! see Experiment 8
Lift, release velocity,... OK! see Experiment 8**
Experiment 1 CC numbers sent in Sensel Morphs MPE mode
function onController() { /* Moving/pressing/sliding finger on my MPE keyboard keys */ Console.print(Message.getControllerNumber()); }
Interface: 128
Interface: 74
Interface: 129
Interface: 128
Interface: 74
Interface: 129
Interface: 128
Interface: 74
Interface: 129
Interface: 128
Interface: 74Conclusions:
CC #128 Pitchbend OK! see Experiment 2
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
CC #129 PolyAftertouch, not ChannelAftertouch? see Experiment 7**
Experiment 2 Pitchbend
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 => PitchBend range -8192 - +8192, 14 bits { Console.print(Message.getControllerValue() - 8192); } }
before subtracting - 8192
Interface: 8192
Interface: 8193
Interface: 8196
Interface: 8200
Interface: 8207
Interface: 8218
Interface: 8231
Interface: 8247
Interface: 8266
Interface: 8291
Interface: 8319
Interface: 8355
Interface: 8393
Interface: 8459
Interface: 8524
Interface: 8589
Interface: 8651
Interface: 8708
Interface: 8782
Interface: 8845
Interface: 8897
Interface: 8936
Interface: 8964
Interface: 8979
Interface: 8992
Interface: 8991
Interface: 8962
Interface: 8899
Interface: 8823
Interface: 8737
Interface: 8650
Interface: 8537
Interface: 8431
Interface: 8326
Interface: 8208
Interface: 8100
Interface: 8003
Interface: 7912
Interface: 7840
Interface: 7790after subtracting - 8192
Interface: 0
Interface: 0
Interface: 0
Interface: 0
Interface: 0
Interface: 0
Interface: 0
Interface: 1
Interface: 1
Interface: 2
Interface: 3
Interface: 5
Interface: 8
Interface: 12
Interface: 16
Interface: 21
Interface: 26
Interface: 32
Interface: 39
Interface: 47
Interface: 60
Interface: 73
Interface: 88
Interface: 103
Interface: 119
Interface: 159
Interface: 199
Interface: 237
Interface: 277
Interface: 317
Interface: 356
Interface: 394
Interface: 429
Interface: 463
Interface: 516
Interface: 569
Interface: 617
Interface: 662
Interface: 702
Interface: 734
Interface: 762
Interface: 782
Interface: 809
Interface: 827
Interface: 838
Interface: 840
Interface: 841
Interface: 826
Interface: 802
Interface: 770
Interface: 717
Interface: 659
Interface: 598
Interface: 534
Interface: 466
Interface: 377
Interface: 284
Interface: 195
Interface: 107
Interface: 0
Interface: -101
Interface: -198
Interface: -302
Interface: -400
Interface: -515Conclusion: Reading pitchbend values seems to work
**
Experiment 3 CC129 = PolyAftertouch see Experiment 7
function onController() { /* Pressing my MPE keyboard key with increasing/decreasing pressure */ if (Message.getControllerNumber() == 129) { Console.print(Message.getControllerValue()); } }
Press and release
Interface: 64
Interface: 64
Interface: 64
Interface: 65
Interface: 65
Interface: 65
Interface: 65
Interface: 65
Interface: 65
Interface: 65
Interface: 65
Interface: 65
Interface: 65
Interface: 65
Interface: 66
Interface: 66
Interface: 66
Interface: 66
Interface: 66
Interface: 66
Interface: 229Press and slide up/down
initial contact 63
63 - 127 slide up
63 - 0 slide down
229 when key releasedConclusion: // initial value 64, slide up/down increases/decreases: 0 <= 64 <= 127, release value 229? confused - polyAT or ?
**
Experiment 4 CC#74 value
function onController() { if (Message.getControllerNumber() == 74) { Console.print(Message.getControllerValue()); } }
Interface: 63
Interface: 63
Interface: 64
Interface: 64
Interface: 64
Interface: 65
Interface: 66
Interface: 66
Interface: 67
Interface: 69
Interface: 70
Interface: 71
Interface: 73
Interface: 75
Interface: 77
Interface: 79
Interface: 80
Interface: 82
Interface: 84
Interface: 86
Interface: 88
Interface: 89
Interface: 90
Interface: 91
Interface: 92
Interface: 93
Interface: 93
Interface: 93
Interface: 93
Interface: 92
Interface: 92
Interface: 90
Interface: 89
Interface: 87
Interface: 85
Interface: 83
Interface: 80
Interface: 78
Interface: 75
Interface: 73
Interface: 70
Interface: 67Conclusion: Initial value ca. 63, slide up/down increases/decreases: 0 <= 63 <= 127 (can be set to other modes with SenselApp)
**
Experiment 5 AKAI MPK249 pitchwheel and modwheel
function onController() { /* Operating my AKAI MPK249 pitchwheel=128 and modwheel=1 */ Console.print(Message.getControllerNumber()); }
Interface: 128 - pitchwheels CC#
Interface: 128
Interface: 128
Interface: 128
Interface: 128
Interface: 128
Interface: 1 - modwheels CC#
Interface: 1
Interface: 1
Interface: 1
Interface: 1**
Experiment 6 AKAI MPK249 ChnAT/Poly AT
function onController() { /* Pressing my AKAI MPK249 pad with Aftertouch set to: Chn or Poly => same result = 129 (keyboard part sends only channel aftertouch, pads can send also PolyAT) */ Console.print(Message.getControllerNumber()); }
Interface: 129
Interface: 129
Interface: 129
Interface: 129
Interface: 129
Interface: 129
Interface: 129**
Experiment 7 AKAI MPK249 pad Aftertouch set to: Poly or Chn
function onController() { /* Pressing pad with Aftertouch set to: Poly or Chn */ if (Message.getControllerNumber() == 129) { Console.print(Message.getControllerValue()); } }
Pressing pad with Aftertouch set to: Poly
Interface: 127
Interface: 53
Interface: 0
Interface: 62
Interface: 77
Interface: 94
Interface: 106
Interface: 114
Interface: 119
Interface: 121
Interface: 127
Interface: 120
Interface: 119
Interface: 116
Interface: 111
Interface: 106
Interface: 100
Interface: 89
Interface: 72
Interface: 64
Interface: 63
Interface: 66
Interface: 67
Interface: 64
Interface: 53
Interface: 39
Interface: 27
Interface: 23
Interface: 22
Interface: 18
Interface: 1
Interface: 0
Interface: 12
Interface: 0
Interface: 101
Interface: 113
Interface: 123
Interface: 127
Interface: 96
Interface: 0Pressing pad with Aftertouch set to: Chn
Interface: 229 - prints 229 with increasing pressure and stops when pressed with enough force
Interface: 229
Interface: 229
...
Interface: 229 - last one when pressure releasedConclusion:
Poly Aftertouch works as expected!
Channel Aftertouch does not!!!**
Experiment 8 Sensel Morphs Velocity and Release Velocity OK
function onNoteOn() { Console.print("Velocity: " + Message.getVelocity()); } function onNoteOff() { Console.print("Release Velocity: " + Message.getVelocity()); }
Interface: Release Velocity: 26
Interface: Velocity: 127
Interface: Release Velocity: 22
Interface: Velocity: 39
Interface: Release Velocity: 21
Interface: Velocity: 23 - hard to get velocities lower than that
Interface: Release Velocity: 23
Interface: Velocity: 48
Interface: Release Velocity: 29
Interface: Velocity: 49
Interface: Release Velocity: 20
Interface: Velocity: 47
Interface: Release Velocity: 18 - releasing pressure very slowly
Interface: Velocity: 60
Interface: Release Velocity: 23
Interface: Velocity: 41
Interface: Release Velocity: 38
Interface: Velocity: 66
Interface: Release Velocity: 127 - releasing pressure very fast**