Generic MIDI Channel Routing with Rig Manager

This has come up a few times, so I did think a generic approach to channel splitting in Rig Manager may be helpful. The previous solution required the use of Local GP Port, this limited the solution to just lifting one channel from the incoming multi channel MIDI stream. This generic solution requires use of a virtual MIDI cable, one per required channel. On windows use loopMIDI and on the Mac use the IAC driver. Two solutions are described.

Virtual Devices

This step is required for both solutions. Set up the number of Virtual MIDI cables, as required (upto 16 for a single MIDI device). Use a name that is easy to determine the source of data, eg. Widi_Bud_1, Widi_Bud_2 etc…

The virtual cables will be available as devices in Rig Manager and can be used or aliased as required.

Once aliased the incoming MIDI channels can now be used as if they are discrete devices and can swapped for other devices in the normal manner of reassigning the alias source. In addition the the incoming channel stream can be safely remapped to channel 1 as there is only a single MIDI channel on the incoming MIDI data stream. This is to avoid having to set channels in VST’s or having to remap MIDI in the wiring diagrams.

Next we must extract and route the data from the multi channel MIDI stream onto the new virtual devices using one of the following two methods.

Global Wiring Method

This is easy to add if you wish to avoid scripts. In the global rackspace wiring, simply split the channels from the multi channel input and send each to the virtual MIDI ports as required.

In this method the data flows out of GP through the virtual MIDI cable and back into GP via the Rig Manager devices.

Gig Script Method

This short script can be added to the Gig Script. Ensure that the cable definitions have been created in your virtual MIDI cable application. And the alias’s have been defined and applied in Rig Manager. Check that they match the MidiInDevice’s in the script. Or adjust the script to match your device alias’s.


var Multi_Channel : MidiInDevice
var Lower_88 : MidiInDevice
var Upper_61 : MidiInDevice
var Control_Surface : MidiInDevice

On MidiEvent(m : MidiMessage) from Multi_Channel
    var c : Integer = GetChannel(m)
    Select
        c == 1 do InjectMidiEventViaRigManager(Lower_88,m)
        c == 2 do InjectMidiEventViaRigManager(Upper_61,m)
        c == 16 do InjectMidiEventViaRigManager(Control_Surface,m)
    End
End

In this method no data flows through the virtual MIDI cables they are used only to provide an active input device. If required, this method could be added to the Include "$rigs$" scripts that are loaded whenever needed by the Rig selection in Rig Manager.

4 Likes