Novation
Novation Launch Control XL (MK2)
Novation Launch Control XL (MK2) is a MIDI hardware controller by Novation: 24 knobs, 8 faders and 24 buttons.
It sends CC and Note on channel 9. The profile cites 5 sources. No control is flagged unverified.
- Manufacturer docs
- Community notes
- LED feedback
- Kind
- hardware device
- Maker
- Novation
- Controls
- 56 controls
- Messages
- CC · Note
- MIDI channels
- 9
- LED feedback
- yes, lights are driven by MIDI
- Signals
midi/lcxl/…- Port name matches
/launch\s*control\s*xl/i
Drag knobs and faders · tap pads and keys · or plug the real one in and press Connect. Nothing is sent anywhere unless you add a MIDI out.
MIDI implementation
Every control of Novation Launch Control XL (MK2) and the message it sends
Generated from the profile file, so it is the same table the on-screen controller plays. Channels are 1–16; numbers are real MIDI numbers.
| Control | Type | Message | Ch | Number | Signal | LED feedback | Verified |
|---|---|---|---|---|---|---|---|
A1 a1 |
knob | CC | 9 | 13 | midi/lcxl/a1 |
— | yes |
A2 a2 |
knob | CC | 9 | 14 | midi/lcxl/a2 |
— | yes |
A3 a3 |
knob | CC | 9 | 15 | midi/lcxl/a3 |
— | yes |
A4 a4 |
knob | CC | 9 | 16 | midi/lcxl/a4 |
— | yes |
A5 a5 |
knob | CC | 9 | 17 | midi/lcxl/a5 |
— | yes |
A6 a6 |
knob | CC | 9 | 18 | midi/lcxl/a6 |
— | yes |
A7 a7 |
knob | CC | 9 | 19 | midi/lcxl/a7 |
— | yes |
A8 a8 |
knob | CC | 9 | 20 | midi/lcxl/a8 |
— | yes |
B1 b1 |
knob | CC | 9 | 29 | midi/lcxl/b1 |
— | yes |
B2 b2 |
knob | CC | 9 | 30 | midi/lcxl/b2 |
— | yes |
B3 b3 |
knob | CC | 9 | 31 | midi/lcxl/b3 |
— | yes |
B4 b4 |
knob | CC | 9 | 32 | midi/lcxl/b4 |
— | yes |
B5 b5 |
knob | CC | 9 | 33 | midi/lcxl/b5 |
— | yes |
B6 b6 |
knob | CC | 9 | 34 | midi/lcxl/b6 |
— | yes |
B7 b7 |
knob | CC | 9 | 35 | midi/lcxl/b7 |
— | yes |
B8 b8 |
knob | CC | 9 | 36 | midi/lcxl/b8 |
— | yes |
P1 p1 |
knob | CC | 9 | 49 | midi/lcxl/p1 |
— | yes |
P2 p2 |
knob | CC | 9 | 50 | midi/lcxl/p2 |
— | yes |
P3 p3 |
knob | CC | 9 | 51 | midi/lcxl/p3 |
— | yes |
P4 p4 |
knob | CC | 9 | 52 | midi/lcxl/p4 |
— | yes |
P5 p5 |
knob | CC | 9 | 53 | midi/lcxl/p5 |
— | yes |
P6 p6 |
knob | CC | 9 | 54 | midi/lcxl/p6 |
— | yes |
P7 p7 |
knob | CC | 9 | 55 | midi/lcxl/p7 |
— | yes |
P8 p8 |
knob | CC | 9 | 56 | midi/lcxl/p8 |
— | yes |
1 f1 |
fader | CC | 9 | 77 | midi/lcxl/f1 |
— | yes |
2 f2 |
fader | CC | 9 | 78 | midi/lcxl/f2 |
— | yes |
3 f3 |
fader | CC | 9 | 79 | midi/lcxl/f3 |
— | yes |
4 f4 |
fader | CC | 9 | 80 | midi/lcxl/f4 |
— | yes |
5 f5 |
fader | CC | 9 | 81 | midi/lcxl/f5 |
— | yes |
6 f6 |
fader | CC | 9 | 82 | midi/lcxl/f6 |
— | yes |
7 f7 |
fader | CC | 9 | 83 | midi/lcxl/f7 |
— | yes |
8 f8 |
fader | CC | 9 | 84 | midi/lcxl/f8 |
— | yes |
1 focus1 |
button | Note · momentary | 9 | 41 · F2 | midi/lcxl/focus1 |
note 41 · on 62 / off 29 | yes |
2 focus2 |
button | Note · momentary | 9 | 42 · F#2 | midi/lcxl/focus2 |
note 42 · on 62 / off 29 | yes |
3 focus3 |
button | Note · momentary | 9 | 43 · G2 | midi/lcxl/focus3 |
note 43 · on 62 / off 29 | yes |
4 focus4 |
button | Note · momentary | 9 | 44 · G#2 | midi/lcxl/focus4 |
note 44 · on 62 / off 29 | yes |
5 focus5 |
button | Note · momentary | 9 | 57 · A3 | midi/lcxl/focus5 |
note 57 · on 62 / off 29 | yes |
6 focus6 |
button | Note · momentary | 9 | 58 · A#3 | midi/lcxl/focus6 |
note 58 · on 62 / off 29 | yes |
7 focus7 |
button | Note · momentary | 9 | 59 · B3 | midi/lcxl/focus7 |
note 59 · on 62 / off 29 | yes |
8 focus8 |
button | Note · momentary | 9 | 60 · C4 | midi/lcxl/focus8 |
note 60 · on 62 / off 29 | yes |
1 ctrl1 |
button | Note · momentary | 9 | 73 · C#5 | midi/lcxl/ctrl1 |
note 73 · on 60 / off 28 | yes |
2 ctrl2 |
button | Note · momentary | 9 | 74 · D5 | midi/lcxl/ctrl2 |
note 74 · on 60 / off 28 | yes |
3 ctrl3 |
button | Note · momentary | 9 | 75 · D#5 | midi/lcxl/ctrl3 |
note 75 · on 60 / off 28 | yes |
4 ctrl4 |
button | Note · momentary | 9 | 76 · E5 | midi/lcxl/ctrl4 |
note 76 · on 60 / off 28 | yes |
5 ctrl5 |
button | Note · momentary | 9 | 89 · F6 | midi/lcxl/ctrl5 |
note 89 · on 60 / off 28 | yes |
6 ctrl6 |
button | Note · momentary | 9 | 90 · F#6 | midi/lcxl/ctrl6 |
note 90 · on 60 / off 28 | yes |
7 ctrl7 |
button | Note · momentary | 9 | 91 · G6 | midi/lcxl/ctrl7 |
note 91 · on 60 / off 28 | yes |
8 ctrl8 |
button | Note · momentary | 9 | 92 · G#6 | midi/lcxl/ctrl8 |
note 92 · on 60 / off 28 | yes |
Device device |
button | Note · momentary | 9 | 105 · A7 | midi/lcxl/device |
note 105 · on 127 / off 0 | yes |
Mute mute |
button | Note · momentary | 9 | 106 · A#7 | midi/lcxl/mute |
note 106 · on 127 / off 0 | yes |
Solo solo |
button | Note · momentary | 9 | 107 · B7 | midi/lcxl/solo |
note 107 · on 127 / off 0 | yes |
Rec Arm arm |
button | Note · momentary | 9 | 108 · C8 | midi/lcxl/arm |
note 108 · on 127 / off 0 | yes |
▲ up |
button | CC · momentary | 9 | 104 | midi/lcxl/up |
CC 104 · on 127 / off 0 | yes |
▼ down |
button | CC · momentary | 9 | 105 | midi/lcxl/down |
CC 105 · on 127 / off 0 | yes |
◀ left |
button | CC · momentary | 9 | 106 | midi/lcxl/left |
CC 106 · on 127 / off 0 | yes |
▶ right |
button | CC · momentary | 9 | 107 | midi/lcxl/right |
CC 107 · on 127 / off 0 | yes |
LED feedback is modeled for 24 of its controls: the LED column says which message lights each one.
Sources
- manufacturer Launch Control XL Programmer's Reference Guide v2 (Novation)8 user templates (slots 0–7) + 8 fixed factory templates (8–15); the MIDI channel of a message = its template, so factory template 1 is channel 9; one port named 'Launch Control XL n' (n = device ID, omitted for ID 1); buttons send 127 on press, 0 on release; LED = note-on (or CC for CC buttons) on the template's channel, velocity = 16 × green + red + 12 flags (12 off, 13/15 red low/full, 28/60 green low/full, 29/63 amber low/full, 62 yellow); knob LEDs addressed by notes 13–15, 29–31 … 125–127 (diagram p. 8)
- manufacturer Launch Control XL Getting Started Guide v2 (Novation)hold User or Factory and press one of the bottom pads 1–8 to select a template; factory templates output a fixed set of CCs and notes; 24 pots, 8 faders, 16 buttons + 4 mode + 4 arrow buttons; same footprint as Launchpad S
- community Ableton Live 12 MIDI Remote Script Launch_Control_XL (decompiled; non-official)selects factory template 1 (LIVE_CHANNEL = 8, i.e. MIDI channel 9) by SysEx; send A knobs CC 13–20, send B 29–36, pan/device 49–56, faders 77–84; track focus notes 41–44, 57–60; track control notes 73–76, 89–92; device/mute/solo/arm notes 105–108; up/down/left/right CC 104–107; knob LED notes 13, 29, 45 … 125 (row 1), 14 … 126, 15 … 127
- community DrivenByMoss LaunchControlXLControlSurface.java (Bitwig; non-official)same numbers; every factory template uses them, on its own channel 9–16; single-LED buttons 127 = on
- community Ardour Novation_LaunchControl_XL.map (non-official)channel 9: knobs CC 13–20 / 29–36 / 49–56, faders 77–84, focus notes 41–44 57–60, control notes 73–76 89–92, left/right CC 106/107
Notes
Factory template 1 (MIDI channel 9) — the template Ableton Live selects; select it by holding Factory and pressing bottom-row button 1. The other factory templates send the same numbers on channels 10–16 (copy the profile and change "channel"). User templates are editable in Novation Components and are not modelled. The User / Factory buttons switch templates inside the unit (SysEx F0 00 20 29 02 11 77 <template> F7) and send no control message. LED feedback: track focus amber-low idle / yellow when held, track control green-low / green, mode and arrow buttons 127 = on — the unit acts on it only while factory template 1 is selected. The LEDs under the knobs (notes 13–15, 29–31 … 125–127 on channel 9) are not driven. MK1 and MK2 share this protocol (Novation publishes one reference for both).
Port names it recognises
- matches
/launch\s*control\s*xl/i
Signals
Every control publishes midi/lcxl/<control> (0..1), plus /raw; pads add /hit, encoders /delta, keys /on /off and n<note>; the last control touched is midi/lcxl/last.
Use it
Use Novation Launch Control XL (MK2) in your own work
Embed it with one line
No import map, no build step. Change
layout, addhardware="ask"for a Connect button.<script type="module" src="https://openaudiovisual.com/packages/midi/element.js"></script> <oav-controller profile="novation-launch-control-xl-mk2" readout></oav-controller>Or as an iframe
For places that only take an iframe. Every event arrives as a
postMessage.<iframe src="https://openaudiovisual.com/embed/controller/?profile=novation-launch-control-xl-mk2&readout" width="720" height="742" style="border:0;max-width:100%" allow="midi" title="Novation Launch Control XL (MK2)"></iframe> <script> // every control the visitor plays arrives here addEventListener('message', (e) => { if (e.data?.source !== 'openav' || e.data.type !== 'control') return; console.log(e.data.detail.signal, e.data.detail.value); }); </script>Send it to Ableton, TouchDesigner or Resolume
What you play on screen leaves as real MIDI on the IAC bus (macOS) or a loopMIDI port (Windows). The steps are on the catalog page.
<!-- what you play on this controller → the IAC bus (macOS) → Ableton, TouchDesigner, Resolume --> <script type="module" src="https://openaudiovisual.com/packages/midi/element.js"></script> <oav-controller profile="novation-launch-control-xl-mk2" midi-out="IAC" readout></oav-controller> <!-- Windows: midi-out="loopMIDI" · let the visitor pick a port: midi-out="ask" -->macOS: Audio MIDI Setup → MIDI Studio → IAC Driver → “Device is online”. Windows 11: the built-in Windows MIDI Services have a loopback (not tested by us); older Windows: install loopMIDI, add a port and use
midi-out="loopMIDI".
In p5.js, with one line
The one-line injection names knobs, faders and pads by their order in this profile, the order of the table above. Add ?profile=novation-launch-control-xl-mk2 to make the on-screen controller this one; a real Novation Launch Control XL (MK2) is recognised by its port name.
document.head.prepend(Object.assign(document.createElement('script'), { src: 'https://openaudiovisual.com/p5/oav-p5.js?profile=novation-launch-control-xl-mk2' }));| In your sketch | Control | Message |
|---|---|---|
knob1 | A1 a1 | CC 13 · Ch 9 |
knob2 | A2 a2 | CC 14 · Ch 9 |
knob3 | A3 a3 | CC 15 · Ch 9 |
knob4 | A4 a4 | CC 16 · Ch 9 |
knob5 | A5 a5 | CC 17 · Ch 9 |
knob6 | A6 a6 | CC 18 · Ch 9 |
knob7 | A7 a7 | CC 19 · Ch 9 |
knob8 | A8 a8 | CC 20 · Ch 9 |
knob(9) | B1 b1 | CC 29 · Ch 9 |
knob(10) | B2 b2 | CC 30 · Ch 9 |
knob(11) | B3 b3 | CC 31 · Ch 9 |
knob(12) | B4 b4 | CC 32 · Ch 9 |
knob(13) | B5 b5 | CC 33 · Ch 9 |
knob(14) | B6 b6 | CC 34 · Ch 9 |
knob(15) | B7 b7 | CC 35 · Ch 9 |
knob(16) | B8 b8 | CC 36 · Ch 9 |
… and 8 more, up to knob(24), in the same order | ||
fader1 | 1 f1 | CC 77 · Ch 9 |
fader2 | 2 f2 | CC 78 · Ch 9 |
fader3 | 3 f3 | CC 79 · Ch 9 |
fader4 | 4 f4 | CC 80 · Ch 9 |
fader5 | 5 f5 | CC 81 · Ch 9 |
fader6 | 6 f6 | CC 82 · Ch 9 |
fader7 | 7 f7 | CC 83 · Ch 9 |
fader8 | 8 f8 | CC 84 · Ch 9 |
function draw() {
background(knob1 * 255); // A1 · CC 13
circle(width / 2, height / 2, 50 + knob2 * 300); // A2 · CC 14
}Encoders, buttons, wheels and strips are not numbered: read them as midi.cc[number] in the table above, or react in controlChange(cc, value, ch).
Missing
Is your controller not here?
Open an issue with the brand and model, whether you have the unit and a link to the manual. Or write the profile yourself: it is one JSON file.
GitHub
Is something in this data wrong?
Every number on this page comes from one JSON file. If it disagrees with your unit or the manual, tell us which firmware you checked and we fix the file.