Forum: VirtualDJ Plugins

Questions about plugins development, talks with other developers etc
Topic: Novation LaunchControl XL Definition File and Mapper

Before I start down the path of making my own definition file and mapper for the Novation LaunchControl XL, I wonder if anyone has already done something similar or got any pointers.

I notice that Settings/Controllers lists the controller in the top left of the window ("Launch Control XL (custom mapping)") and has "custom mapping" available. I can then move a knob/slider/button on the controller to assign an action. This works for the basics but I can't see how to do things like change the LEDs and setup banks.

Posted Thu 24 Jan 19 @ 5:42 pm

Posted Thu 24 Jan 19 @ 5:47 pm
PhilWPRO InfinityMember since 2011
I have one and fiddled with it enough to get it working but also struggled with the LED's. If I send raw MIDI commands to the unit I can change their colours but through scripting I've had trouble making all the colours work.

It's working well enough for me so I stopped poking at it.

I did create a custom device file for it and then mapped to that. Not sure if the code is correct for the LED's and that's my problem, or if the problem is the script statements in the mapping. I only tried mapping the LED's on the bottom of the unit, not the ones under the knobs. In any case, if it's of use, here's the device map I made. It goes in the Devices folder of your Virtual DJ installation.


<device name="LaunchControlXL" author="PhilW" description="Novation Launch Control XL" version="800" type="MIDI" vid="0x1235" pid="0x0061" decks="8">

<button note="0x69" name="Device" />
<button note="0x6A" name="Mute" />
<button note="0x6B" name="Solo" />
<button note="0x6C" name="RecordArm" />

<button note="0x29" name="TrackFocus1" deck="1" />
<button note="0x2A" name="TrackFocus2" deck="2" />
<button note="0x2B" name="TrackFocus3" deck="3" />
<button note="0x2C" name="TrackFocus4" deck="4" />
<button note="0x39" name="TrackFocus5" deck="5" />
<button note="0x3A" name="TrackFocus6" deck="6" />
<button note="0x3B" name="TrackFocus7" deck="7" />
<button note="0x3C" name="TrackFocus8" deck="8" />

<button note="0x49" name="TrackControl1" deck="1" />
<button note="0x4A" name="TrackControl2" deck="2" />
<button note="0x4B" name="TrackControl3" deck="3" />
<button note="0x4C" name="TrackControl4" deck="4" />
<button note="0x59" name="TrackControl5" deck="5" />
<button note="0x5A" name="TrackControl6" deck="6" />
<button note="0x5B" name="TrackControl7" deck="7" />
<button note="0x5C" name="TrackControl8" deck="8" />

<!-- Colours
Green in first nybble, red in second but need to add 12 (0Ch) to second nybble for actual value
First number is the raw green and red, second adds 12 (0Ch) to low nybble, next is colour description, then the name from Novation for the colour
00 0C black (off off)
01 0D low red (red low)
02 0E med red
03 0F high red (red full)
10 1C low green (green low)
11 1D low green low red (amber low)
12 1E low green med red
13 1F low green high red
20 2C med green
21 2D med green low red
22 2E med green med red
23 2F med green high red
30 3C high green (green full)
31 3D high green low red
32 3E high green med red (yellow full)
33 3F high green high red (amber full)
<color note="0x49" values="0x0C=#000000,0x0D=#400000,0x0F=#FF0000,0x1C=#004000,0x1D=#404000,0x3C=#00FF00,0x3E=C0FF00,0x3F=FFFF00" name="TrackControlLED1" deck="1" />
<color note="0x4A" values="0x0C=#000000,0x0D=#400000,0x0F=#FF0000,0x1C=#004000,0x1D=#404000,0x3C=#00FF00,0x3E=C0FF00,0x3F=FFFF00" name="TrackControlLED2" deck="2" />
<color note="0x4B" values="0x0C=#000000,0x0D=#400000,0x0F=#FF0000,0x1C=#004000,0x1D=#404000,0x3C=#00FF00,0x3E=C0FF00,0x3F=FFFF00" name="TrackControlLED3" deck="3" />
<color note="0x4C" values="0x0C=#000000,0x0D=#400000,0x0F=#FF0000,0x1C=#004000,0x1D=#404000,0x3C=#00FF00,0x3E=C0FF00,0x3F=FFFF00" name="TrackControlLED4" deck="4" />
<color note="0x59" values="0x0C=#000000,0x0D=#400000,0x0F=#FF0000,0x1C=#004000,0x1D=#404000,0x3C=#00FF00,0x3E=C0FF00,0x3F=FFFF00" name="TrackControlLED5" deck="5" />
<color note="0x5A" values="0x0C=#000000,0x0D=#400000,0x0F=#FF0000,0x1C=#004000,0x1D=#404000,0x3C=#00FF00,0x3E=C0FF00,0x3F=FFFF00" name="TrackControlLED6" deck="6" />
<color note="0x5B" values="0x0C=#000000,0x0D=#400000,0x0F=#FF0000,0x1C=#004000,0x1D=#404000,0x3C=#00FF00,0x3E=C0FF00,0x3F=FFFF00" name="TrackControlLED7" deck="7" />
<color note="0x5C" values="0x0C=#000000,0x0D=#400000,0x0F=#FF0000,0x1C=#004000,0x1D=#404000,0x3C=#00FF00,0x3E=C0FF00,0x3F=FFFF00" name="TrackControlLED8" deck="8" />

<led note="0x29" value="0x3F" name="TrackFocusLED1" default="TrackFocus1" deck="1" />
<led note="0x2A" value="0x3F" name="TrackFocusLED1" default="TrackFocus2" deck="2" />
<led note="0x2B" value="0x3F" name="TrackFocusLED1" default="TrackFocus3" deck="3" />
<led note="0x2C" value="0x3F" name="TrackFocusLED1" default="TrackFocus4" deck="4" />
<led note="0x39" value="0x3F" name="TrackFocusLED1" default="TrackFocus5" deck="5" />
<led note="0x3A" value="0x3F" name="TrackFocusLED1" default="TrackFocus6" deck="6" />
<led note="0x3B" value="0x3F" name="TrackFocusLED1" default="TrackFocus7" deck="7" />
<led note="0x3C" value="0x3F" name="TrackFocusLED1" default="TrackFocus8" deck="8" />

<slider cc="0x0D" name="SendA1" zero="0x40" deck="1" />
<slider cc="0x0E" name="SendA2" zero="0x40" deck="2" />
<slider cc="0x0F" name="SendA3" zero="0x40" deck="3" />
<slider cc="0x10" name="SendA4" zero="0x40" deck="4" />
<slider cc="0x11" name="SendA5" zero="0x40" deck="5" />
<slider cc="0x12" name="SendA6" zero="0x40" deck="6" />
<slider cc="0x13" name="SendA7" zero="0x40" deck="7" />
<slider cc="0x14" name="SendA8" zero="0x40" deck="8" />

<slider cc="0x1D" name="SendB1" zero="0x40" deck="1" />
<slider cc="0x1E" name="SendB2" zero="0x40" deck="2" />
<slider cc="0x1F" name="SendB3" zero="0x40" deck="3" />
<slider cc="0x10" name="SendB4" zero="0x40" deck="4" />
<slider cc="0x11" name="SendB5" zero="0x40" deck="5" />
<slider cc="0x12" name="SendB6" zero="0x40" deck="6" />
<slider cc="0x13" name="SendB7" zero="0x40" deck="7" />
<slider cc="0x14" name="SendB8" zero="0x40" deck="8" />

<slider cc="0x31" name="PanDevice1" zero="0x40" deck="1" />
<slider cc="0x32" name="PanDevice2" zero="0x40" deck="2" />
<slider cc="0x33" name="PanDevice3" zero="0x40" deck="3" />
<slider cc="0x34" name="PanDevice4" zero="0x40" deck="4" />
<slider cc="0x35" name="PanDevice5" zero="0x40" deck="5" />
<slider cc="0x36" name="PanDevice6" zero="0x40" deck="6" />
<slider cc="0x37" name="PanDevice7" zero="0x40" deck="7" />
<slider cc="0x38" name="PanDevice8" zero="0x40" deck="8" />

<slider cc="0x4D" name="TrackFader1" deck="1" />
<slider cc="0x4E" name="TrackFader2" deck="2" />
<slider cc="0x4F" name="TrackFader3" deck="3" />
<slider cc="0x50" name="TrackFader4" deck="4" />
<slider cc="0x51" name="TrackFader5" deck="5" />
<slider cc="0x52" name="TrackFader6" deck="6" />
<slider cc="0x53" name="TrackFader7" deck="7" />
<slider cc="0x54" name="TrackFader8" deck="8" />


Posted Thu 24 Jan 19 @ 6:24 pm
PhilW wrote :
It's working well enough for me so I stopped poking at it.
- Just for now :-)

It's all looking very familiar - I had a go at mapping a game controller in VirtualDJ... hmmm ... ten years ago or so. I went down the HID route and against all the odds got it to work! Hidtrace has come in handy for quite a few other things. I feel another steep learning curve coming on though, quite a few beers have flowed under the bridge. Do you think you might have hit a big MIDI stumbling block? I might have a go at a HID implementation. I'll post back here for your input, if you're willing.

Can I ask, what was your process for this development? How did you approach it and what sort of resources did you use? I found the developer docs provided at (so kindly linked above by groovindj) a great way in (I vaguely remember!).


Posted Fri 25 Jan 19 @ 10:20 am
PhilWPRO InfinityMember since 2011
Hi, back, yes I am interested but don't have a lot of time or energy to throw at this at the moment. I used the document you linked and found the Novation programmer's reference guide on their web site. I also grabbed miditrace from this site. The Launch Control XL unit has multiple templates - the device file I posted only deals with user template #1. The other templates cause the buttons, knobs and faders to send different MIDI notes/messages.

My limitation with the LED's is either in the 'color note' tags or the way my mapping/script was trying to interact. It's not that important to me - I can see PFL on one set of LED's and the other group is green for playing, red for stopped on a cue point, and off otherwise. But that may change if I get time and the bug again.

I'm using the unit in VDJ with an eight-deck skin for use at hockey games. I have a few decks set aside for music for home goal, away goal, home penalty, away penalty, then general decks for general music. The skin is still very much a work-in-progress but I will release it here when it's a bit more usable.

Let me know how it goes. If we chat here then maybe others can learn or chime in with their suggestions.

Posted Fri 25 Jan 19 @ 5:31 pm
We are taking a look on the device programmer's guide.

We can help with the device, so please stay tuned.

If anyone is interested in helping us please send me a PM

Posted Mon 28 Jan 19 @ 9:34 am