MIDI Program Change Action & Midi to External Device

Keyboard Maestro doesn't natively send Program Changes, so I made this little group which outputs PC messages as hex. Set the desired Channel and Program Numbers in the purple and green actions respectively. Credit to @Nige_S for his help converting the channel number.

MIDI Program Change.kmmacros (21 KB)

Macro screenshot

Keyboard Maestro can't specify output ports, so this is what I'm using for sending MIDI to external devices:

  • Download and install SendMidi via Homebrew.
  • Execute a shell script with parameters according to the instructions on the Sendmidi site.

For example, this sends program change 15 on channel 12 to the port "IAC Driver Bus 1":


Wow! This is even more than I expected! I'll dive into it, thank you!!!

1 Like

"Set Variable "ChannelCode" to Text "C%Hex1%MidiChannel - 1%"?

:clap:t3::clap:t3::clap:t3: Brilliant! Replaced above. Thanks!

wondering if it's possible to have 2 commands to increment/decrement the program change value

Hi and welcome to the forum! :wave:t3:

Yes, this is totally possible. I'm away for the weekend so perhaps someone else can step in?

no rush :wink:

Hmm. I'm actually not sure how to do this.

There's no increment/decrement command, so you'd need to detect the current program number in order to increment it. I'm not sure how to do that.

right, that's where i got stuck as well, so what about an iterative command?
i'm thinking something like cmd+1 which would give me program change =1 but if i keep cmd pressed i can iterate pressing 1, effectively triggering program change =2 the second time, 3 the third time and so on.
This would let me cycle through the program changes, always starting from zero
just an idea :slight_smile:

Run the Initialize macro first, which will send Program Number 1. Then Run the Increment macro to send 2,3,4,5....

MIDI Program Change - Initialize.kmmacros (21 KB)

Macro screenshot

Increment Program Number.kmmacros (20 KB)

Macro screenshot

These could be easily condensed into a single macro, but I didn't want to do that without knowing how you'd like to trigger each function.

This is perfect! thanks so much, it works great :slight_smile:
I ended up using 2 commands, one to increment and one to decrement, no need for the initialize.
It's exactly what i was hoping to have, a quick way to cycle through a limited (less than 10) program changes to trigger articulations.
Thanks for your help!

1 Like

I was wondering if this could be done using midi notes instead of program changes
So the initialize would set the note to c-2 and then the other 2 commands would increase/decrease the note

Give this a try:

Increment Midi Note.kmmacros (45 KB)

Macro screenshot

It comes set to use N as a hotkey trigger.

  • Tapping the trigger will play the note, incremented up a semitone for each subsequent tap.
  • Pressing and holding the trigger will reset to whichever Midi note you set in the green action by its note number. It comes set to C1.
1 Like

that got me started and now i understand better the basics, so I managed to customize it to do exactly what i needed, works great :wink:

If anyone needs it I attach my macro:

Inc:Dec midi note Macros.kmmacros (128.0 KB)