MIDI SysEx Implementation and Assignment to External MIDI Devices

I'm using a lot of MIDI commands, being sent from KM. I even trigger the MIDI commands from a MIDI foot pedal and it allows me to do basically everything hands free if needed.

A pretty simple yet flexible and reliable tool to route the MIDI data is …

MIDIPipe

It's free but since I am using it more or less on a daily basis I donated to support the developer.

In example for live streams I can change an OBS scene, a Keynote page for my notes and send a command to an instrument to call up a patch or something else simultaneously with just a simple press on the Live Logic foot controller.

2 Likes

Thanks again for your help, I appreciate it!
But I was interested in the reverse direction system:
from a app event trigger via KM to a MIDI controller that receives exclusive MIDI messages to create user feedback. and for this KM and Sysex message generation in particular are expected to work correctly. and not vice versa...

Thanks for the clarification. Unfortunately I wasn't able to understand that from your first post.

SendMidi does what you want. Have you tried it?

Yes, I investigate it app. but too slowly

Hi @noisneil,

I tried to send my command with any variations but didn't succeed! where is the syntax error?

Note: smidi - added alias "sendmidi"

Try starting the command with /usr/local/bin/. For example:

/usr/local/bin/sendmidi dev "ipMIDI Port 1" hex syx 00 00 66 10 12 90 64 7F

1 Like

Isn't result! :frowning_face:

Maybe due to virtual ports "ipMIDI" - unrecognized ?

I'm not going to be able to offer much more help with this, I'm afraid, as I'm just another guy who read up a bit and managed to get it working; I'm not an expert on command line stuff.

I suggest you read the instructions on Github and try and understand SendMidi for yourself. All I can tell you is that it works great for me when sending program changes to an external device.

Good luck.

1 Like

Anyway - thanks for your tips.

Have you read the instructions on Github? It says right at the top of the Usage section to use virt instead of dev for virtual ports. So in your case:

/usr/local/bin/sendmidi virt "ipMIDI Port 1" hex syx 00 00 66 10 12 90 64 7F

i did it,,, when showed above few messages:

Download Midi Monitor and try a few types of SendMidi commands. See if any of them are sending messages successfully. It might be that it is working but isn't registering on your device...?

Midi monitor show is:

20:30:43.480	From ipMIDI Port 1	SysEx		Loud Technologies / Mackie $C bytes	F0 00 00 66 14 14 76 31 2E 30 30 F7
20:30:43.496	From ipMIDI Port 2	SysEx		Loud Technologies / Mackie $C bytes	F0 00 00 66 15 14 76 31 2E 30 30 F7
20:30:43.496	From ipMIDI Port 5	SysEx		Loud Technologies / Mackie $C bytes	F0 00 00 66 14 14 76 31 2E 30 30 F7
20:30:43.496	From ipMIDI Port 6	SysEx		Loud Technologies / Mackie $C bytes	F0 00 00 66 15 14 76 31 2E 30 30 F7
20:30:43.496	From ipMIDI Port 1	SysEx		Loud Technologies / Mackie $C bytes	F0 00 00 66 14 14 76 31 2E 30 30 F7
20:30:43.496	From ipMIDI Port 2	SysEx		Loud Technologies / Mackie $C bytes	F0 00 00 66 15 14 76 31 2E 30 30 F7
20:30:43.496	From ipMIDI Port 5	SysEx		Loud Technologies / Mackie $C bytes	F0 00 00 66 14 14 76 31 2E 30 30 F7
20:30:43.496	From ipMIDI Port 6	SysEx		Loud Technologies / Mackie $C bytes	F0 00 00 66 15 14 76 31 2E 30 30 F7
20:30:43.496	From ipMIDI Port 1	SysEx		Loud Technologies / Mackie $C bytes	F0 00 00 66 14 14 76 31 2E 30 30 F7
20:30:43.496	From ipMIDI Port 2	SysEx		Loud Technologies / Mackie $C bytes	F0 00 00 66 15 14 76 31 2E 30 30 F7
20:30:43.496	From ipMIDI Port 5	SysEx		Loud Technologies / Mackie $C bytes	F0 00 00 66 14 14 76 31 2E 30 30 F7
20:30:43.496	From ipMIDI Port 6	SysEx		Loud Technologies / Mackie $C bytes	F0 00 00 66 15 14 76 31 2E 30 30 F7
20:30:43.496	From ipMIDI Port 1	SysEx		Loud Technologies / Mackie $C bytes	F0 00 00 66 14 14 76 31 2E 30 30 F7
20:30:43.496	From ipMIDI Port 2	SysEx		Loud Technologies / Mackie $C bytes	F0 00 00 66 15 14 76 31 2E 30 30 F7
20:30:43.496	From ipMIDI Port 5	SysEx		Loud Technologies / Mackie $C bytes	F0 00 00 66 14 14 76 31 2E 30 30 F7
20:30:43.496	From ipMIDI Port 6	SysEx		Loud Technologies / Mackie $C bytes	F0 00 00 66 15 14 76 31 2E 30 30 F7
20:30:43.496	From ipMIDI Port 1	SysEx		Loud Technologies / Mackie $C bytes	F0 00 00 66 14 14 76 31 2E 30 30 F7
20:30:43.497	From ipMIDI Port 2	SysEx		Loud Technologies / Mackie $C bytes	F0 00 00 66 15 14 76 31 2E 30 30 F7
20:30:43.497	From ipMIDI Port 5	SysEx		Loud Technologies / Mackie $C bytes	F0 00 00 66 14 14 76 31 2E 30 30 F7
20:30:43.497	From ipMIDI Port 6	SysEx		Loud Technologies / Mackie $C bytes	F0 00 00 66 15 14 76 31 2E 30 30 F7
20:30:43.497	From ipMIDI Port 1	SysEx		Loud Technologies / Mackie $C bytes	F0 00 00 66 14 14 76 31 2E 30 30 F7
20:30:43.497	From ipMIDI Port 2	SysEx		Loud Technologies / Mackie $C bytes	F0 00 00 66 15 14 76 31 2E 30 30 F7
20:30:43.497	From ipMIDI Port 5	SysEx		Loud Technologies / Mackie $C bytes	F0 00 00 66 14 14 76 31 2E 30 30 F7
20:30:43.497	From ipMIDI Port 6	SysEx		Loud Technologies / Mackie $C bytes	F0 00 00 66 15 14 76 31 2E 30 30 F7
20:30:43.497	From ipMIDI Port 1	SysEx		Loud Technologies / Mackie $C bytes	F0 00 00 66 14 14 76 31 2E 30 30 F7
20:30:43.497	From ipMIDI Port 2	SysEx		Loud Technologies / Mackie $C bytes	F0 00 00 66 15 14 76 31 2E 30 30 F7
20:30:43.497	From ipMIDI Port 5	SysEx		Loud Technologies / Mackie $C bytes	F0 00 00 66 14 14 76 31 2E 30 30 F7
20:30:43.497	From ipMIDI Port 6	SysEx		Loud Technologies / Mackie $C bytes	F0 00 00 66 15 14 76 31 2E 30 30 F7

Are those messages coming from SendMidi? In other words, did you clear Midi Monitor, then use SendMidi and that's what you saw? If so, SendMidi isn't the problem. Have you successfully used those same Sysex commands in other ways or are you not sure they will trigger the desired function on your device?

yes the MIDI monitor was cleared and the command was sent
but it is not captured by MIDImon. and what is on the screen: this is the answer of the MCU
From ipMIDI Port *x* SysEx

and these messages say something else - I guess it's self defined by mackie dev.&ver.#
F0 00 00 66 14 ... F7
ref.: <hdr> 14 *vv vv vv vv vv* - is 5 ASCII bytes containing version string, e.g. MCU dev.“v1.00”

the next srting, probably same info too for XT dev.“v1.00” because it send from "ipMIDI Port 2" - I know for sure what it's XT-emulation
F0 00 00 66 15 ... F7

The answer in response to what?

probably it message

iMac3:~ vladistone$ /usr/local/bin/sendmidi virt "ipMIDI Port 1" hex syx 00 00 66 10 12 90 64 7F

was convert from SendMIDI like this:

23:34:42.280	To ipMIDI Port 1	SysEx		Loud Technologies / Mackie $77 bytes	F0 00 00 66 14 12 00 31 34 3A 41 31 31 20 31 35 3A 41 31 32 20 31 36 3A 41 31 33 20 31 37 3A 41 31 34 20 31 38 3A 41 31 35 20 31 39 3A 41 31 36 20 32 30 3A 50 72 76 20 32 31 3A 44 65 66 20 30 20 20 20 20 20 20 30 20 20 20 20 20 20 30 20 20 20 20 20 20 2B 31 20 20 20 20 20 30 20 20 20 20 20 20 30 20 20 20 20 20 20 30 20 20 20 20 20 20 30 20 6F 20 20 20 F7

it's the first string of MIDI monitor, when i switched the "Spy on output to destination"

Note: other transfer lot of data - I deleted from here as non informative

If you want to see the output from SendMidi, select Spy on output to destinations:

It appears SendMidi is working, so perhaps you need to investigate whether your device is configured correctly to receive these commands from that virtual port.

With a high probability that the problem is due to the inability to transfer in SysEx message the information "Note On" in hex format 0x90 - which was explained to me here:
Therefore, this data byte is accepted and interpreted by SendMIDI as EOX and then there is a fragment 64 7F F7 - which throws the remainder F7 as an undefined ambiguous message element
I began to look for a solution to a similar problem and so far I found this discussion and Wiki info
and found the mothod convert this part of sysex message

I still don't know if I'm looking in the right direction?

Setup is all right: