14bit CC's in Max For Live - Supported? If so, how to use them?

tsutek's icon

Hi all,

Having trouble utilizing 14bit CC controls in my M4L patch. I'm using live.dials in the raw range of 0. - 1. and can't seem to get the knob(s) to respond to 14bit CC properly - I get the feeling that M4L treats the CC messages as 7bit instead of 14.

At first live refused to midi map my 14bit CC controller as such onto the live.dial object in question. Ok, so I entered 16383 into the "steps" parameter in the Max inspector, and after that Live allowed me to map the CC as "Absolute 14bit". But I get the feeling that it's still not giving me true 16383 step operation, seems to just skip alot of values..

M4L does support 14bit CC's right? Am I missing something here?

tsutek's icon

I posted this same question to the Ableton forum, and no replies from there either.. I have emailed both Ableton and Cycling74 about this issue, hopefully one of them will respond.. From my experience with IT & customer service (also my job) I'd say that it's starting to look pretty bad if they don't reply soon (ie. tells me that 14bit CC input is not supported in M4L)..

Really bummered by this.. It shouldn't be too much to ask to get a reply to a perfectly valid technical question.

Andrew Pask's icon

A quick test here with the xbendout help file and a MFL device does not reveal anything wrong - I am able to increment a 14 bit CC and do not see any "jumps" in the data coming out of a modulated live.dial with range set to 16383

Perhaps we need more details of your problem.

BTW, I do not see any email from you in support.

-A

tsutek's icon

Hi Andrew,

Thanks for chiming in, I was starting to get worried :)
I sent the mail to info@c74, so it probably went to the wrong address (didn't think it was a "tech support" message as everything seems to be working)..

Could you please elaborate on how you set the live.dial parameters? I'll check the xbendout help file in the meantime.

I apologize if I seemed upset about this. It's just that I consider this to be a really big deal, something that I will need to have working in just about every device I'll make..

Cheers

Andrew Pask's icon
Max Patch
Copy patch and select New From Clipboard in Max.

Here's what I had in my MFL device - just what you mentioned

I used Max's MIDI out ports to remote Live.

Another thing for you to check would be to "record" the output of your controller in Max using regular MIDI input

-A

tsutek's icon

Pasted your patch into a new M4L instrument, assigning your knob to a modwheel (midimapping via live - "Absolute 14bit"). Now when I move the modwheel, the number jumps around erratically, in steps of varying sizes. I also cannot get the same value twice when turning the modwheel to 0% position. Strangeness!

Please tell me again how you set up your MIDI to get your patch working like you said? The difference must lie therein, unless my MIDI setup is royally skr00d.. But then again, everything works like it should when using 3rd party VST plugins et al..

Andrew Pask's icon

I didn't do anything special at all. Just routed MIDI out of the xbend help patch to remote Live.

Try looking at the incoming 14 bit data from your controller in Max.

-A

tsutek's icon

I've been studying printouts from a midiparse. It seems like my controller (little phatty) transmits all 14bit CC's identically, first comes the MSB followed by the LSB @32 CC#s above it.. if a knob/wheel movement is too small to reach to the next adjacent MSB value, it is dropped altogether. So I might get a value pair
"MSB 000 / LSB 119"
followed by a single value
"LSB 003"

Is this "dropping" of redundant MSB value a SOP for 14bit mididata or could it be causing my particular mapping problem?

Max Patch
Copy patch and select New From Clipboard in Max.

attached the patch so you can verify I am reading this right.. Using the "U" port for my controller..

tsutek's icon

Tried to get a functional prototype going in Max5 standalone.. I've gotten into a point where I have a CC's MSB & LSB values packed to a list (in order to sync both values together at all times, and also to include the MSB value in every message), but unpacking this list into a xbendout2 object gives me only the MSB values!?

Max Patch
Copy patch and select New From Clipboard in Max.

Please check this, have I mispatched something?

EDIT: Figured it out - the xbendout2 object sends the 14bit value as 3 discreet messages - cc# (225) / LSB / MSB

Ok, so seems like that's working.. gotta see if I can patch this up on the Live side..

tsutek's icon

Got something working on the Live side! by using a max midi effect, I can transform the cutoff knob on the phatty to a 14bit MIDI pitchbend message, which works (tested with the operator so far - smooth, precise 14bit operation without audible steps :)

Now just to get this working with my live.dial objects.. and eventually with native Ableton mapping!

Cheers

tsutek's icon

Ok, so I got the 14bit CC working in M4L, even with the live.dial object!

It seems however that I cannot achieve a working 14bit CC mapping into a live.dial through Ableton's own MIDI mapping. Even if a live.dial has a parameter "range: 1. 16383.", the only way to have that control range with the full 14bit resolution is to hack the control into an xbendout/xbendin routine and bypass live's own MIDI mapping on the control.

I am uncertain whether my controller is at fault here, since the MSB's are dropped when they contain redundant data..? But since I have full 14bit functionality with 3rd party plugins & instruments, it seems doubtful.

EDIT: Actually tested 3rd party control again, just to make sure I wasn't imaging things.. and the same happens with those?! I need to check this issue with another controller. I'll shut up for now..

Randy George's icon

I was also looking for a solution to this... with a little bit of patching, when the xbendout and xbendin objects are used together they can help parse/format 14-bit CC messages from/for devices that send/receive MSB CC (0 - 31) with LSB CC (32 -63).

Max Patch
Copy patch and select New From Clipboard in Max.
Max Patch
Copy patch and select New From Clipboard in Max.

Basically the same thing:

EDIT: i just realized all that is necessary is a little bit of math. added patcher.

orange_glass's icon
Max Patch
Copy patch and select New From Clipboard in Max.

Hi I've tweaked this as you need the LSB also to trigger the multiplication otherwise you never get a zero. see the [t b i] on the receiver circuit.

Roman Thilenius's icon