Jump to content

High Resolution MIDI Control & Logic Pro


fader8

Recommended Posts

If you're new to MIDI, you've probably heard that one of its limitations is its low resolution message format for continuous controllers, eg 128 steps of control (0-127 or 7 bit). Well, it isn't true, but the myth gets perpetuated by the proliferation of low cost, substandard MIDI controllers flooding the market that simply choose not to support the transmission of higher resolution messaging. If you have a controller that does support higher resolution, (0-16,383 or 14 bit) then you're in luck because Logic Pro's channel strips, many of its plug-ins and even 3rd party plug-ins can benefit from this.

 

I'll start with a couple of examples for using 14 bit MIDI messaging with a channel strip fader, but first a little primer on 14 bit MIDI....

 

The way it works with 14 bit MIDI continuous controllers is that rather than sending just one 7 bit message to get the 0-127 values, it sends a pair of 7 bit messages, one after the other. These are referred to as the MSB (most significant bit) and the LSB (least significant bit) respectively. For example, if we want to control channel strip fader level with just cc7, then we only get the MSB and we only get 128 steps of resolution. If we pair that up with an LSB, then we can get up to 127 steps "in between" each step of the MSB's resolution.

 

Obviously, the LSB can't be cc7, so it's standardized that the LSB message number is exactly 32 above the MSB's message number. So to send a 14 bit control to a channel strip fader, we need to send a cc7 message, followed immediately by a cc39 message. (7+32=39, right?)

 

Here's what that looks like. I've programmed a continuous rotary encoder on my Novation RemoteSL as a 14 bit volume control. (This is easy, more on this below.) Each consecutive click of the knob sends two messages. Here's 5 clicks to the right:

14bmessage1.jpg.b1b49e4e5c00ab78fa87117da2ce07d9.jpg

 

Notice that the regular ol' cc7 stays at a value of 106, but the cc39 goes up. When that LSB cc39 message reaches a value of 127, the next click will advance the MSB message value:

14bmessage2.jpg.f8d99c8460fef0b6cb3e024551799d4a.jpg

 

So, this means that we can start from 0: MSBcc7 0, LSBcc39 0, and twist the encoder through 16,383 clicks to MSBcc7 127, LSBcc39 127 to get to full level. That's a lot of clicks, you'll be there spinning that thing for a while! :shock:

 

"OK, fader8. If I have to spin knobs forever, how is this useful in a normal mixing, etc., workflow in Logic?"

 

Ah! Well, in it's present state, not very useful, other than for demonstration purposes. But we'll get to that... So you need to visit the configuration software that came with your controller. As an aside, the quality of any MIDI controller these days is not just in the controller itself, but also the quality and stability of the configuration software is really important. Some companies are great at making the hardware, but can't write desktop software that works worth a damn! Anyway, on with the examples.

 

Here's a configurator for a Novation controller. Your controller should have a similar dialog available.

novation.jpg.ebc2fe1f22085c2a2726ca94b42bf3e5.jpg

Notice that all that's needed is to tell it the controller number is cc7. Clicking the 14 bit checkbox will automatically pair cc39 to the cc7 message. Hopefully the app that came with your rig makes it this simple.

 

Once you have your controller sending the right thing, move on to Logic's controller assignments.

 

14 bit Control and Logic's Controller Assignment

The Logic Pro manual doesn't go into a lot of detail regarding 14 bit controllers, other than to mention they are supported. No matter, since the procedure is pretty much the same.

 

Open Controller Assignments and move a channel strip fader. Move your newly configured 14 bit MIDI control. Make sure you move it enough for Logic to recognize that the message is 14 bit. You should see both "Hi" and "Lo" values appear in the Value Change field, as shown here:

14b-recognized.jpg.c777f74c97387951d99073cb5e3ed693.jpg

You don't need to make any other changes, so close the Controller Assignment window and test your control out.

 

OK, now that your fingers are cramping from all that knob spinning, we can turn this into something that's actually useful, a very fine control that only adjusts the fader from plus 2dB to minus 2 dB. Open up your controllers configuration app. You will need to enter the following values for the fader/encoder you use:

plusminus2.jpg.1975c715454f51bebd7c9999d97fc535.jpg

(You may or may not need the "Default" setting, which represents setting 0dB on Logic's channel strip fader with this value. Your app may not even include a setting like this.)

 

This fine control will write detailed automation to your track as the automation system runs also at high resolution. There isn't a level meter in Logic that measures dB to 2 decimal points, but if you have a metering plug-in that does, you can load up a test oscillator and see that you can automate the level to that precision using your new 14 bit controls.

 

14 bit Modulation Sources for Virtual Instruments

You can skip Logic's Controller Assignments altogether if you want/need to use 14 bit controllers as modulation sources in some of Logic's software instruments. In fact, if you look at the ES2 MIDI mod source lists, you can see that there's a big chunk of cc numbers missing above #31. The synth doesn't let you assign those cc's as they are reserved in case you are ever using the LSB's for cc's 0-31.

cc-list.jpg.478d2a196e44914ea998ad817b066e27.jpg

You don't have to configure the instrument any differently, it will automatically recognize the presence of the LSB message. Hi res controls for instruments can be REALLY useful, especially for detuning oscillators and things like that.

 

Other things

Where 14 bit MIDI controls can really be useful is when you have a plug-in parameter that has more than 128 values associated. This is very common. If you want to be able to dial those in from your MIDI controller, then you will need to use 14 bit controls. In addition to whatever facilities your MIDI controller has for adjusting the range of the control, the Controller Assignments window also has the "Multiplier" field for each learned parameter, which I can attest works well for 14 bit messages.

 

That's enough geek stuff for now. Hope this is easy enough to understand!

fader8

Link to comment
Share on other sites

  • 3 weeks later...

Excellent stuff!

 

If we pair that up with an LSB, then we can get up to 127 steps "in between" each step of the MSB's resolution.

 

Shouldn't that be 128 steps in between (values 0 - 127), resulting in 16,384 values?

 

MSB = 0, with LSB 0 - 127 = 128 steps for MSB 0

thru

MSB = 127, with LSB 0 - 127 = 128 steps for MSB 127

 

128 x 128 = 16,384

 

Just checkin'! :mrgreen:

Link to comment
Share on other sites

Excellent stuff!

 

If we pair that up with an LSB, then we can get up to 127 steps "in between" each step of the MSB's resolution.

 

Shouldn't that be 128 steps in between (values 0 - 127), resulting in 16,384 values?

 

MSB = 0, with LSB 0 - 127 = 128 steps for MSB 0

thru

MSB = 127, with LSB 0 - 127 = 128 steps for MSB 127

 

128 x 128 = 16,384

 

Just checkin'! :mrgreen:

 

0 - 16,383 is 16,384 values. ;)

Link to comment
Share on other sites

You must have taken those from the plans of my old house in NY LOL!

 

Now to be totally picayune, the LSB accounts for values from 0 - 127, so that's 128 steps inbetween each MSB step (which is probably what you meant. Right? Or do I need to provide a similar drawing :lol: :lol: :lol:

Link to comment
Share on other sites

Now to be totally picayune, the LSB accounts for values from 0 - 127, so that's 128 steps inbetween each MSB step (which is probably what you meant. Right?

fader8 says "we can get up to 127 steps "in between" each step of the MSB's resolution."

 

So if there are 128 steps of the MSB's resolution, meaning for that MSB, you have 128 possible values, then that's 127 intervals "in between" each one of those 128 steps. On top of those 127 intervals, there is one more interval between the highest LSB of a MSB and the lowest LSB of the next MSB, so in the end, you're right, there are 128 intervals between two MSBs, but fader8 is also right, there are 127 intervals in between each step of a single MSB.

 

I just like it when everybody is right. Sue me. :lol:

Link to comment
Share on other sites

Imagine if Einstein was off by one, like, E=mc^3. Then where would we be?

 

:lol:

Gravity would bend the other way. That means your spare tire would be under your armpits instead of around your waist. And boobs wouldn't sag so you'd have a lot of 80 year old woman walking around with perky breasts, in case that's useful to you....

 

I think we'll buy you an abacus, ski.

Link to comment
Share on other sites

  • 3 months later...

That's some great information, thanks!

 

Sorry to dig up an old thread, however, I have a further question. I have a Moog Voyager which sends and receives 14-bit MIDI data. I'd really like to be able to automate its creamy filter smoothly from an External MIDI track in Logic. Is it possible to get Logic to send 14-bit MIDI as well as receive it? Perhaps it's possible to make something in the Environment?

 

Thanks,

 

T

Link to comment
Share on other sites

It's not really possible to create anything in the environment that will output a continuous stream of 14-bit messages.

 

In terms of "automation", there's no reason you can't record movements of the Voyager's cutoff control itself simply as MIDI (recording it in a region just like any other MIDI data), though any kind of editing on the LSB for that data would be extremely difficult.

Link to comment
Share on other sites

Thanks ski, I can obviously HyperDraw the MSB but it's not really practical to HyperDraw the LSB. Sorry, I meant to say HyperDraw before, "automate" was a slip of the tongue.

 

I've been learning Supercollider recently, I may see if I can build a tool that intercepts the MSB data and interpolates it to 14-bit. Thanks for replying though.

Link to comment
Share on other sites

I put "automation" in quotes only because in Logic-speak this would be referred to as "region based automation" which is a term I can't stand. OK, off the soap box now LOL!

 

Hope that works out with supercollider.

 

Cheers,

 

Ski

Link to comment
Share on other sites

  • 2 weeks later...
It's not really possible to create anything in the environment that will output a continuous stream of 14-bit messages.

 

In terms of "automation", there's no reason you can't record movements of the Voyager's cutoff control itself simply as MIDI (recording it in a region just like any other MIDI data), though any kind of editing on the LSB for that data would be extremely difficult.

Widdershins,

You "can" create a 14 bit fader object in the environment, then record it's output to a track, but that wouldn't get you anything more than what you can achieve using the knob on your voyager anyway.

Link to comment
Share on other sites

  • 4 years later...

Hi Guys.  I love this post.  I'm having a little trouble getting results in Logic Pro X.

 

I've been building my own Midi Controller, and now have gotten it to send 14 bit messages.    In Logic Pro X,  i'm not seeing the "Control Settings" (screenshot from your original post).   So i'm not sure how to control the High Value and Low value to allow for more that 127 steps.    I can see my controller properly sending the Hi and Lo as 14 bit in logic,  but it still is reading as 127 steps.    Any thoughts?

Link to comment
Share on other sites

  • 1 year later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...