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: 74

    Conclusions:
    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: 7790

    after 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: -515

    Conclusion: 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: 229

    Press and slide up/down
    initial contact 63
    63 - 127 slide up
    63 - 0 slide down
    229 when key released

    Conclusion: // 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: 67

    Conclusion: 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: 0

    Pressing 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 released

    Conclusion:
    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

    **


Log in to reply
 

10
Online

1.3k
Users

4.2k
Topics

38.3k
Posts