"14-bit" potentiometer

Hello,
After two days of research and testing, I haven’t managed to get a 14-bit potentiometer to work in “Minimalist mode” in Grid Editor (1.6.2) for a PBF4 plugged in Pure Data. The goal: high-resolution control for frequency variation.
For the PD side, I’ve found a small patch that seems to work, according to its creator. (I also have all my possible MIDI “inputs” open so I don’t miss a move anywhere.)

For the Grid Editor part, I tested the following settings:

  • Potmeter / PC / Bit depth = 7/10
  • Potmeter / PC / Min = 0
  • Potmeter / PC / Max = 14-bit MIDI (16383) / 1024
  • MIDI / 14-bit MIDI / Channel = 0 (1)
  • MIDI / 14-bit MIDI / CC number = 32 / 64 / CC#0
  • MIDI / 14-bit MIDI / Controller Value = -1 / val / 16383

I also tested it in MIDI / RPN-NRPN mode.
I’ve also tried the following tutorial: Intech Studio Grid: 14-bit MIDI CC

But none of these settings allow me to receive a stream of values in PD.
Or on Grid Editor MIDI Monitor.

Is there something I’ve missed?
Or do I have to use code in ‘setup’ mode?

I need help.
Thanks!

I have a profile that works for PO16 and can probably be adapted to PBF4. It logs 14-bit in the grid editor and tested it in my own software. I have an old max patch somewhere that could probably be helpful for the Pd bit. I am aiming to get this PO16, PBF4, and VSN1 set up for a performance this weekend, so I will be in this a bunch. I haven’t shared any scripts/profiles on here, but let me know if this works?

grid-editor://?config-link=ZElwOrJW0QMSVxVXjHOK

I should mention that the PO16 one is only for a couple of pots right now. If you just copy/paste the exact same scripts to the rest of the pots, it will scale automatically for all of them.

I have never been able to get the 14-bit res working with the MIDI action. It looks like hi res should be built into that, but it seems something is missing or I don’t get it. I used the scripts instead and it looks to be pretty solid and well behaved for hi res from hardware! Anyway, hope that helps!

Hi @dmckemie77,
Thanks for sharing your experience regarding the failure to set 14-bit via the MIDI window.
And thanks for sharing the profile via the link, but I don’t know where or how to use it:

  • I tried in the online and app Grid Editor, searching for
    grid-editor://?config-link=ZElwOrJW0QMSVxVXjHOK
    and also
    ZElwOrJW0QMSVxVXjHOK
    and
    dmckemie77 / @dmckemie77
    but I didn’t find anything.
    I haven’t shared a profile myself yet, so I don’t know how to do it correctly.
    I’ll try again tonight.
    Thanks!

Hi there!

Here’s a quick demonstration on how to do 14bit MIDI in Editor today. Unfortunately the 14-bit MIDI Action itself is a bit outdated and uses a variable that’s not there anymore as default.

14bitmidi

You can do it how I did it here, or create a local variable called val and make it equal to self:potmeter_value().

Hi there,

Thanks @narayb, it works really fine, so easily !

Note that I was forced to specifiy the Potmeter / MIDI / 14 bit MIDI / CC number, even the “auto(number)” was identical to the concerned pot CC number .

For the Pure Data users, try the downloadable patch here, it works fine, by @ddw_music :

Thanks a lot @narayb & @dmckemie77 !

Cheers !

PS : If “14-bit MIDI Action is a bit outdated”, what replace it now ?
NRPN MIDI ?

1 Like

This is great @narayb ! I knew it had to be easier than resorting to scripting with seeing all of the options there. I don’t have a Pd patch but have done it in Max. Here is a screenshot of the core, with the ctlin object bringing in concurrent CCs and some math to separate them. The [ctlin] objects get each CC on channel 3, and the [expr] does the math to make an integer. The [scale] object here was for sending 14-bit MIDI back out to hardware.

Screenshot 2026-03-18 at 9.32.20 AM

I am new to the grid ecosystem and am wondering the easiest ways to share profiles/patches but it looks to be an incredibly expansive area once you get the hang of it. On 14-bit vs NRPN, as far as I know the NRPN way is 7- or 14-bit and is assigned strict CCs that you can send multiple messages over (99/98), primarily used in hardware as a standard messaging stream. 14-bit is totally assignable on both ends, so you can say send 14-bit over CCs 38/6 or 39/7 (as long as they are 32 CCs apart) and in the software side route entirely. For the use cases we all seem to be discussing, 14-bit is the way for software, if you wanted to use the grid to control/expand a hardware synth, then NRPN is the way.

2 Likes

NRPN is more wasteful with bandwidth, so if you don’t need the NRPN protocol specifically, I would advise against using it. It uses 4 messages to send a 14-bit message out. Its advantage is that you can theoretically have a thousands of different messages in that protocol without them overlapping compared to regular 14-bit.

If you really want to go hard on efficiency, and don’t need many unique control messages, then I would suggest using the Pitch Bend message, as it will only use 1 message to send the whole 14-bit data though. You can only have 16 of them though…

1 Like

Thanks @dmckemie77 & @narayb for these details, which help us choose the option that best meets our needs.
About the “14-bit Pitch Bend message”, I did come across it, but I wasn’t able to implement it either.

Well in Editor this is also pretty straightforward, I made a control element Preset for it called Pitch Wheel - Pitch Bend. You can reduce the bit depth if it has too much noise, but this should generally work and it’s the implementation with the lowest latency as it’s contained within a single message.

I updated it with the new Simple Color action as it was still using the old versions, but should work all the same.

1 Like

Thanks @narayb for this other solution.
I did find the preset called “Pitch Wheel - Pitch Bend” in the Grid Editor’s Profile Cloud.
But for now, I can’t seem to get any data feed into Pure Data with this solution (except for a raw 0-127 value).
To be continued. :slight_smile:
Thanks!

1 Like

Just to mention: with a “self:encoder_value()” instead of “self:potmeter_value()” this works for the (=my) EN16, too. Thanks for the hint.

That too!

Also using self:get_auto_value() works for all kinds of Events!

2 Likes