Novation Launchkey Mk 4

I purchased a Novation Launchkey Mk4. It’s pretty nice. I selected it because it is supported by Ardour!!. Yesterday I started my subscription to Ardour because the version of Ardour that is bundled with Ubuntu Studio is an older version that does not support Launchkey Mk4 integration.

It works fine as a MIDI controller and everything works as expected. I’m having trouble with DAW integration.

Now that I’m running the latest version, I’m not having any luck getting the integration to work. I’ve selected “Novation Launchkey 4” it in the Control Surface preference. When I press the “Show Protocol Settings” button I’m now sure what to select for the incoming and outgoing MIDI settings.

The “Incoming MIDI on:” drop-down includes:


Launchkey MK4 Pads
Launchkey MK4 61 Launchkey MK4 (In)
Launchkey MK4 61 Launchkey MK4 [2] (In)


The “Outoging MIDI on:” drop-down includes:


Launchkey MK4 61 Launchkey MK4 (Out)
Launchkey MK4 61 Launchkey MK4 [2] (Out)


I’ve selected them all and have not had any luck getting the Launchkey MK4 to do anything. Also, I don’t see anything in the log window.

When I run 8.12 from a terminal, and then select Launchkey MK4 as the control surface, I see the following messages in the terminal:


daw port not found
daw port not found
daw port not found
Configuring displays now


When I open the MIDI Tracer window and click the drop-down to select the port, I see:


Launchkey MK4 Pads
Launchkey MK4 daw in
Launchkey MK4 daw out
Launchkey MK4 in
Launchkey MK4 out


When I select “in” I see data when I press keys. However, when I select the “daw in” port, I never see any data when pressing anything on the controller (including daw specific stuff like “play” and “rec”)

I’d love to work with whoever to help get it working.

Thanks for your help.


Jon

What is likely happening is that your version of ALSA (kernel, really) has renamed the ports on the LK.

In a terminal window, run: aplaymidi -l

Then paste the output here. You can do this with Ardour running or not, but the LK should be plugged in.

Thank you for your help. I really do appreciate it.

jon@caracal:~$ aplaymidi -l returns
Port Client name Port name
14:0 Midi Through Midi Through Port-0
16:0 Simmons SD500 Simmons SD500 MIDI 1
20:0 UMC204HD 192k UMC204HD 192k UMC204HD 192k MID
24:0 Launchkey MK4 61 Launchkey MK4 61 Launchkey MK4
24:1 Launchkey MK4 61 Launchkey MK4 61 Launchkey MK4

Yep, they borked it again. It is insane that this keeps happening.

Can you let me know what cat /proc/asound/version says?

Thanks.

jon@caracal:~$ sudo cat /proc/asound/version
Advanced Linux Sound Architecture Driver Version k6.8.0-58-lowlatency.

Yeah, so they borked again in these newer versions. I don’t know what the right approach will be to try to make this work. Giving both ports the same name … stupidly braindead.

Thanks for your help. I’ve looked at a couple of things. Please forgive me for brainstorming:

aplaymidi -l yidelds


24:0 Launchkey MK4 61 Launchkey MK4 61 Launchkey MK4
24:1 Launchkey MK4 61 Launchkey MK4 61 Launchkey MK4

Can we count on the :0 or :1 to help?

Perhaps it’s as simple as the daw port being the second one?
Perhaps there is a request we could make to both ports to differentiate them.

I issued:
lsusb -tv and found these interesting bits:


    ID 05e3:0610 Genesys Logic, Inc. Hub
    |__ Port 001: Dev 007, If 0, Class=Audio, Driver=snd-usb-audio, 12M
        ID 1235:0146 Focusrite-Novation 
    |__ Port 001: Dev 007, If 1, Class=Audio, Driver=snd-usb-audio, 12M
        ID 1235:0146 Focusrite-Novation 
    |__ Port 001: Dev 007, If 2, Class=Human Interface Device, Driver=usbhid, 12M
        ID 1235:0146 Focusrite-Novation 

Perhaps there is something we could do something with the interface number…

That led me to:
sudo lsusb -v -d 1235:0146
Which produced the output below. It identifies the interfaces for this device…


Bus 001 Device 007: ID 1235:0146 Focusrite-Novation Launchkey MK4 61
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0 [unknown]
bDeviceSubClass 0 [unknown]
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x1235 Focusrite-Novation
idProduct 0x0146 Launchkey MK4 61
bcdDevice 1.00
iManufacturer 1 Focusrite - Novation
iProduct 2 Launchkey MK4 61
iSerial 3 L6VCT3W460142B
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x0080
bNumInterfaces 3
bConfigurationValue 1
iConfiguration 4 Launchkey MK4 61
bmAttributes 0x80
(Bus Powered)
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 1 Audio
bInterfaceSubClass 1 Control Device
bInterfaceProtocol 0
iInterface 5 Launchkey MK4 61 MIDI
AudioControl Interface Descriptor:
bLength 9
bDescriptorType 36
bDescriptorSubtype 1 (HEADER)
bcdADC 1.00
wTotalLength 0x0009
bInCollection 1
baInterfaceNr(0) 1
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 1 Audio
bInterfaceSubClass 3 MIDI Streaming
bInterfaceProtocol 0
iInterface 6 Launchkey MK4 61 MIDI Int
MIDIStreaming Interface Descriptor:
bLength 7
bDescriptorType 36
bDescriptorSubtype 1 (HEADER)
bcdADC 1.00
wTotalLength 0x0043
MIDIStreaming Interface Descriptor:
bLength 6
bDescriptorType 36
bDescriptorSubtype 2 (MIDI_IN_JACK)
bJackType 1 Embedded
bJackID 1
iJack 7 Launchkey MK4 61 MIDI In
MIDIStreaming Interface Descriptor:
bLength 9
bDescriptorType 36
bDescriptorSubtype 3 (MIDI_OUT_JACK)
bJackType 1 Embedded
bJackID 7
bNrInputPins 1
baSourceID( 0) 1
BaSourcePin( 0) 1
iJack 8 Launchkey MK4 61 MIDI Out
MIDIStreaming Interface Descriptor:
bLength 6
bDescriptorType 36
bDescriptorSubtype 2 (MIDI_IN_JACK)
bJackType 1 Embedded
bJackID 9
iJack 9 Launchkey MK4 61 DAW In
MIDIStreaming Interface Descriptor:
bLength 9
bDescriptorType 36
bDescriptorSubtype 3 (MIDI_OUT_JACK)
bJackType 1 Embedded
bJackID 15
bNrInputPins 1
baSourceID( 0) 9
BaSourcePin( 0) 1
iJack 10 Launchkey MK4 61 DAW Out

I’m happy to test anything. Looks like
bool
LaunchKey4::probe (std::string& i, std::string& o)
might be the place…

Looking back through my local mail archives of Alsa-Devel, this seems to have been raised as a ticket on Github in March, but the ticket now seems to be missing (snippet below):

I’m not sure what happened to this. Does anyone know?

Cheers,

Keith

It seems that someone deleted (not closed) this issue.

I am going to refile it once I confirm it was not fixed.

1 Like

From the control surface code, we do not interact at a low enough level to get the ALSA client:port information. And nowhere do we operate at the level of USB device descriptors.

In case anyone is interested:

Are we stuck until ALSA fixes the ambiguous naming problem?

Probably. The only fix I’ve thought of so far is to rely on the likely fact that the two ports always appear in order somehow, and assume that the second one is the DAW port.

1 Like

I submitted a kernel patch to fix this issue just now. It will not help users stuck with kernels that behave this way, but it will help out The Future.

I will continue to think about a heuristic for use in Ardour given broken kernel behavior.

4 Likes

Wait a minute :^)
I’m confused - perhaps we’re overthinking this.

In Ardour, when I select Edit>Preferences>Control Surfaces
I get a dialog where I check-box “Novation LauhchKey 4”.
Below the list of Control Surfaces options there is a button labeled:
“Show Protocol Settings”. When I press that button I’m presented with a list of MIDI ports for incoming and outgoing MIDI.

It seems that since there are two MIDI ports labeled
“Launchkey MK4 61 Launchkey MK4”, the second one (both in and out) has a “[2]” appended to the name.

It seems that the second “Launchkey MK4” at the end of the name is where the “(daw)” should be, but…

If we have this dialog to specify the ports, why are we also trying to identify the ports in the code? It seems the ports were user-identified with the dialog.

Am I misunderstanding something? What is the purpose of this dialog?


It is intended that dedicated control surface support includes (a) detecting the presence of the device (b) auto-connecting in whatever way is necessary for the device to work.

However, because we are hackers and we know people like to do wacky things like “hey, I just built a virtual Launchkey m4 application, is there any way to get Ardour to connect to it even though there’s no actual hardware”, we leave the connection dialog in place. There should be no reason to have to use it.

Thank you. That clears it up. This is why I love this software.
:grinning: