So from my experience MacOS has no issue with multiple programs using the same MIDI input device at the same time.
After recently migrating to Windows 10 I found out that annoyingly it seems Windows MIDI drivers only allow one application to listen to a MIDI input at a time.
Here is how you can work around this by creating virtual MIDI ports to fan-out the device to multiple applications.
Create virtual ports with loopMIDI
This program lets you create as many virtual MIDI “loopback” ports as you want.
If you want to understand how these work, imagine connecting a MIDI USB cable to your computer but connecting the MIDI IN of the cable to the MIDI out of the cable to form a loop.
What this means is anything your computer sends to the OUT of these devices gets “looped back” to the IN of the device.
Here I’m creating one loopback device for each program to use.
Route the MIDI device input to the virtual ports using MIDIOX
MIDIOX is a general purpose MIDI program that does a lot of stuff. We can use it to route the MIDI device input we’re interested in to the output of the loopback devices.
The interface is a little cryptic but what you want to do is go to
MIDI Devices and select the input you’re interested in as well as the output of the loopback devices you created in the previous section.
Make sure to check “Automatically attach Inputs to Outputs during selection.” before clicking OK. This will create a routing similar to the one shown below.
In the picture above the “mio” device is split and sent to the output of the loopback devices. The signal then loops back to the input port of each device where it can be consumed by the respective programs.
Just open each program and select the virtual port input as the midi input.
As shown in this example here I’m able to use a single MIDI controller to control both Ableton and the desktop Keyscape plugin at the same time without having to close one while the other is running.