My next issue: I have a midi controller that I want to use in both Gig Performer and VirtualDJ. That’s impossible, of course, so I downloaded MidiLoop with the intention to create a loopback port, and use a script in GP so that when I press a button on the controller, it gets “forwarded” to VirtualDJ. To this end, I have done the following.
Downloaded loopMIDI
Created a port named GP to VDJ
I have created a controller in VirtualDJ with a button like this.
In GP, I have created a script for a button that sends a note to the midi out of of “GP to VDJ”. I can see this is sent correctly as MidiView shows the message
out, Note on 1 Velocity 127, 1, 127
However, VirtualDJ is not picking up this note. In VirtualDJ, I mapped the button to “deck 1 play”. However, VirtualDJ is not registering this as a note press (nothing appears in the Log Report.txt)
Any advise would be appreciated. Thank you very much.
Connect the controller to GP. You then have several options either map to widgets and send out MIDI messages from the widget mapping (or group of widgets) to VDJ. Or make sure the Thru is turned on under the widget MIDI settings and route the controller input MIDI block to a MIDI out block to VDJ. Finally you could go the script route.
The THRU and this configuration would be my choice. Where widgets for GP can be mapped as normal and the script will handle the VDJ conversion if required.
Other methods would be to duplicate the incoming controller onto a new MIDI channel in a gig script and one channel to map to GP and the second channel to map to VDJ. This assumes you are using Rig Manager and the controller alias in Rig Manager is called Control_Surface.
var Control_Surface : MidiInDeviceAlias
//Called when a NoteOn or NoteOff message is received at some MidiIn device
On NoteEvent(m : NoteMessage) from Control_Surface
InjectMidiEventViaRigManager(Control_Surface, WithChannel(m,1))
InjectMidiEventViaRigManager(Control_Surface, WithChannel(m,2))
End
//Called when a CC message is received at some MidiIn device
On ControlChangeEvent(m : ControlChangeMessage) from Control_Surface
InjectMidiEventViaRigManager(Control_Surface, WithChannel(m,1))
InjectMidiEventViaRigManager(Control_Surface, WithChannel(m,2))
End
You will now receive two MIDI events per action that can be handled based on channel.
Note on G#1 (44) Velocity 127 Channel 1
Note on G#1 (44) Velocity 127 Channel 2
Note off G#1 (44) Velocity 127 Channel 1
Note off G#1 (44) Velocity 127 Channel 2
Thank you. I did some more tinkering and I did not know about the rig manager. I got everything to work - it turns out the channels are 0-based in VDJ, so channel 1 in my control software is channel 0 in VDJ.
I also found out I can just associate the control surface with the virtual MIDI-port out and that just sends every midi command on to the midi cable. I guess there’s more than one way to Rome.