Bottom line: I'm looking for software, preferably for Linux and open source, which will allow me to send an arbitrary SysEx message when a particular PC or CC message is received, all other messages should just pass through.

In particular: I want to use a keyboard controller with some pads on it to control a pipe organ through a Peterson ICS-4000. For just playing notes this is pretty straightforward MIDI. However, because pipe organs can have multiple stops open simultaneously on a given manual you can't just use PC messages to turn on stops. Instead Peterson uses a well documents SysEx message format which allows for multiple stops to be turned off and on with a single message. So what I want to do is to essentially create some "presets" or, if we're going to speak organ, "combination" by storing some of these hand-crafted SysEx messages in some software and then triggering them by sending a particular CC or PC message. My controller does not allow for me to store SysEx messages to be sent when a pad is pressed, but I can send CC or PC messages.

So, the end result is looking for software where I can store some arbitrary SysEx messages and then have that software watching the MIDI data coming from the controller on a particular channel and then sending a particular SysEx message when a particular CC or PC message is seen. For a bit I thought that midish might allow for this as it does realtime filtering/routing but unfortunately it does not appear to allow arbitrary sending of SysEx messages as a filter, only sending one SysEx at the start of operation.

I did also think about writing something quick and dirty in Python with the mido library but I'm unsure on what the latency might be with that and if it will be acceptable for realtime performance.

Any suggestions?

closed as off-topic by Todd Wilcox, David Bowling, Dom Oct 8 '18 at 13:39

This question appears to be off-topic. The users who voted to close gave this specific reason:

  • "Questions seeking recommendations for specific equipment are off-topic, because they are primarily opinion based. Instead, describe the required function and setting in which the equipment will be used, and ask what you should look for to achieve that." – Todd Wilcox, David Bowling, Dom
If this question can be reworded to fit the rules in the help center, please edit the question.

  • See Translating MIDI input into computer keystrokes on Linux?. But Python would be perfectly fine. – CL. Oct 2 '18 at 17:01
  • Hmm, that does offer some interesting possibilities. I may have to play around with using aseqdump and a script to monitor the MIDI data for CC/PC and then use amidi to send the SysEx messages out. I guess at that point I'd just need to make sure that I could still loop all the incoming data back to the out port and merge in the SysEx messages. It also looks like the "m2i" program mentioned over there plus some lua scripting might do it. – Ben Franske Oct 2 '18 at 17:50
  • amidi wants exclusive access to the device, better try aplaymidi. Looping and merging is trivial with sequencer ports. – CL. Oct 2 '18 at 19:03
  • 1
    The man page for aplaymidi is unclear on whether it supports sending SysEx messages or not so I'll have to play with that. It also looks like it only supports playing midi files and not from stdin or the command line so I'd need to generate files for playback either on advance or on the fly. I'll have to evaluate if that makes more or less sense than coding something up in Python or if any other possibilities appear on the horizon. – Ben Franske Oct 2 '18 at 19:52
  • 1
    @nath aplaymidi supports SysEx messages inside a Standard MIDI File (such as generated by arecordmidi). – CL. Jan 18 at 8:19

Browse other questions tagged or ask your own question.