MIDI Controller Input -- a Difficult Question for Keyboard Nerds

Hey everyone, I have a super strange question. I have this mini keypad that comes with a slider: https://www.keebwerk.com/nano-slider/

While I have successfully been able to configure the keyboard buttons (using software known as QMK), I am yet unable to make this slider (a potentiometer) work to change system volume on macOS. By the keypad vendor's own admission--and I wish I knew this before I bought it--making the potentiometer slider work with macOS System controls of any kind is difficult, presumably due to the closed nature of Apple's ecosystem.

My question to you sleuths is: is there any potential way of making the slider work with macOS, at all, or if simply to modulate system volume? I have attached a screenshot of the keymap file to this if it helps. Any suggestions would be hugely helpful, thanks everyone.

It seems to me the slider needs to fire events as it slides, with the current position being part of the payload.

(I don't know the above will get you very far, but that's how I would begin to think about the problem.)

How does this keypad surface states and events?

That's definitely a good thought, thank you. I think an initial step is to confirm whether it is sending out MIDI packets at all--I think there may be specialty software that can detect this (or perhaps Keyboard Maestro can?).

If it does send out a MIDI signal (if I've compiled it correctly), my hope is that KM is able to detect it and use it as part of it's MIDI trigger

Keyboard Maestro can work with MIDI triggers. Set the Trigger to This MIDI and you've got a bunch of options to trigger on notes, controllers or packets.

Note that I've never actually used any MIDI triggers, I just know they're available. Keyboard Maestro sets the token %TriggerValue% to the value of what caused the trigger to activate so it might be able to tell you what it captures to decide what the volume level that would mean.

1 Like

There is an older thread on a similar topic here...

Might get you started on the right track.

Also... If you are working with any kind of MIDI controller, you want to grab a copy of MIDI Monitor from here. snoize: MIDI Monitor. That will let you easily identify the specific CC message and channel that your device is outputting on.

2 Likes

Hi there, this was super helpful, thanks! I've run into a second, smaller issue though: MIDI controller sensitivity. Currently, I have the slider set so that moving it up or down toggles through Safari tabs. However, the speed is a bit too high. Is there an easy way to use KM to bring down the sensitivity a bit? I've tried instituting a delay but that's not quite it. Any guidance would be highly appreciated, thanks!

Not sure if something is built-in, I can't find it, but you can add your own delay by counting macro activations and only executing every X once (e.g. every other, every fourth, etc...)

Just be sure to reset the count back to 1 when you run the actual actions. Also the variable holding the counter needs to be global so the count is retained between runs.

The smallest interval, other than running every trigger, is running every other trigger. If that is too slow I'm not sure how to make it finer grained.

This is incredibly thoughtful and helpful. Pardon my programming ignorance, but how would I go about adding this delay to the action of, say, switching tabs? (I.e., like hotkey Cmd + Shift + right arrow)

Or, does making MidiDelay global automatically apply this to all macros I've set up for it? Thanks again, so much.

I've replicated your macro as-is, and unfortunately feel that nothing has slowed down ):

Should be able to add to the top of a macro you have.

I'm assuming you have a macro that runs every time a certain midi event occurs and you're getting a flood of them. So you do something on midi and it triggers one cmd+shift+right arrow, but you're getting so many of them you get a flood of cmd+shif+right arrow.

Adding this to your code before the cmd+shift+right arrow is sent should slow it down a bit. The way it is written it'll ignore 3 of every 4 events the midi device sends.

If this doesn't work you'll need to post your macro or an example that has the same issue.

1 Like

Amazing--this has worked to great effect. You have been so generous with your time, thank you so very much.

Also, just so I have this straight, if I were to increase the delay further, can I simply change the "is < 4" to "is <5"? Thanks again

Sorry to reply so late, I'm assuming you figured this out, but yes making the # bigger the in < test (as in your example < 5) will increase the delay. making it a 5 will cause it to skip 4 of every 5 events that it receives.

To be technically accurate: if the events come in at roughly the same rate than increasing the number of events skipped will increase the delay time, but if the events come in "bursty" (sometimes very quickly and sometimes slowly) the actual amount of time of the delay may not be consistent.