MIDI Surface to Multiple Instances on Windows

Hi. I’d like more than one instance of GP to respond to controls on a SubZero control surface (like a cheap NanoKontrol). I’ve linked some GP widgets and scripts to MIDI CCs and they work on the first instance. The second instance doesn’t seem to ‘see’ them. As a control surface, I don’t think it appears on the list of MIDI devices I can connect to a loopback device and send to the second instance.

Maybe I can do something with OMNI midi and filtering just CCs though the manual says be careful of loops.

Is are there other ways using scripts or clever trickery to send CCs from a surface to another instance, make it respond or perhaps use scripting to control things in a different instance of GP ?



@AndyW, it seems that like most of the MIDI drivers on Windows, your control surface driver are not multiclient. This means that the MIDI port of your control surface cannot be opened several time by several GP instances. The idea is then to open it, says on the first GP instance and to block it on the other GP instance (to be sure you always have the control in the first GP instance). Then you can use something like LoopMidi (loopMIDI | Tobias Erichsen) to send MIDI messages from the first GP instance to others.

Would this work for you?

Hi. That’s where I started but it doesn’t seem that easy. my controller keyboard is set up just like you say. The separate control surface is connected by usb and I don’t think it appears as a midi device in the list. Yet the first instance can receive control messages from it. Unless I’m just not seeing it in the list somehow. I will check again or otherwise use a midi monitor tool to see what’s sending messages where.

Aha. You’re exactly right. My StudioLogic keyboard appears more than once and I assumed wrongly that something called a USB Midi controller was it too. But that generic device is actually my subzero surface. I can route that now. Cheers.

Yes, all devices that are available are listed. :+1:

The last thing I need to see is whether the second instance of gig performer can see midi cc messages sent through the loopback interface. They seem to behave a bit different in that GP and all instruments can see them without having to patch the device through to each vst separately. I will test that.

You man of little faith! :innocent:

It nearly works. I connected my SubZero surface to the LoopBE device. Controls that I’ve linked to a GP widget or code don’t get sent to LoopBE. Controls that aren’t yet assigned to anything in GP generate midi events that are sent out to loopBE.

Is it possible that GP is somehow grabbing the midi cc events before they appear for use in the midi block and preventing them from being passed on for further processing ?

Just seen another comment that when you map a midi message to a widget, the message isn’t sent to midi in blocks any more. That explains the issue. Which makes it difficult to get two GP instances to react to the same midi cc message. There might be a clunky workaround to this.

If I’m not mistaken, you connect your device to the first instance of GP as you normally would, and then use LoopMIDI to connect the messages from the first instance to the second.

I use Bome Midi Translator Pro for all virtual MIDI port and translation needs I have. It’s a very versatile and comprehensive product.

That normally works, except that GP script and widgets get to see CC messages before they go to the input blocks and if they’ve been caught there they don’t get passed to the input blocks. So you can’t use loopmidi or loopbe to catch them from the input blocks.

I can catch unassigned cc events but I need to capture and route them all.

You can use the Thru option for the widgets to pass the message.

ScreenHunter 38 (01)

1 Like

With midi devices that work on a single instance like yours, I use loopMidi to create a virtual midi device. That way loopMidi is the only one connected to the device and multiple device can then access the virtual midi device.

Works well for me with my Korg Kronos and my audiofront midi expression device.

Thanks all. The solution was a bit of all your ideas. I found that my GP version was out of date. When I updated it I got the Thru option for widgets. That allowed me to catch CC events in a widget at the same time as passing them on to a second instance of GP using LoopBE. Everything’s working perfectly now.