I am working on a M4L patch that allows for dynamic precision control of any Live device parameter, that overcomes the limitations of 7-bit Midi on the one hand and the unhandy range of 16383 values with fixed precision rotary encoders in 14-bit mode on the other. But what I need is continuous input for relative CC message values and while Max standalone Midi driver seems to deliver that, Max 4 Live seems to filter them out, probably because it does not recognize that repeatedly sending the same message in relative mode means a change while in absolute mode it would not. This is true for "midiin" and "ctlin"
Example: Turning a controller slowly up from 0 gives you the following series of values:
Absolute: 1, 2, 3, 4, 5 ,6
Relative: 1, 1, 1, 1, 1, 1 (well, actual coding depends on implementation of relative values)
In Max "midiin" and "ctlin" do send each and every "1". M4L on the other hand only sends the first "1" and swallows the following ones, while I see on the Midi-Input-Signal in Live's upper-right corner, that the messages are received. :(
Motivation: I'm using a Novation 49SL MkII controller keyboard. It's rotary encoders can be set up to send CC messages realizing 14 bit absolute values using two CCs. One would expect babyskin smooth controller input with 14-bit - and in fact, you really get that. But the rotary encoder still only counts 1 up or 1 down approximately 50 times per revolution of the knob. That makes more than 327 turns to go from the lower end to the upper end of the parameter range. How would you need to move that cut-off from 50Hz to 10kHz? Get it? It's no use.
What we really need is a high resolution controller with fixed upper and lower bounds. This seems to be a technical problem because of noise. It's the domain of analog devices (Man, do I love my Monotron).
I wan't to simulate that using dynamic relative CC input. That means turning the knob faster results in bigger relative values. The SL MkII realizes this in modes (DispType) "APOT" and "Rel2". I have managed to decode the dynamic APOT messages in live and translate them to values of the kind 1,6,12,20,2,-1,-4, and so on. By accumulating the values and scaling the min and max range to the parameter range, I basically get what I want. But when I turn the knob at constant speed, Live swallows all equal CC messages in a series but the first one and nothing get's accumulated. The controller sends all the time, Live receives, but nothing is output by "midiin" or "ctlin". No message, no bang. Even a bang would be enough for a start.
Max stand-alone does it.
Does anyone know, how to work around this in M4L?
EDIT: I am aware of the relative midi input modes in Live which are recognized when you activate Midi-Learn. But these do not increase the parameter precision. The accumulated input values stay in the range of 0-127 of a midi controller. That's why I'm working on a patch that reads the relative values so I can use my own cumulation formula with arbitrary precision.