[LAD] A question for USB/MIDI experts

Philippe Wicker pwicker at mac.com
Fri Apr 8 20:13:27 UTC 2016


Hello,

What you see seems to be the MIDI encoding used by a USB device. Every “simple” MIDI event (that is less that 3 bytes) are encoded as a 4 bytes word. The 1st byte (MSB) is - if I remember correctly - the concatenation of the MIDI port and a USB specific code for the event. The 3 remaining bytes contains the MIDI event as it is encoded on a standard serial MIDI line.

HTH

Phil

> On 08 Apr 2016, at 22:05, Fons Adriaensen <fons at linuxaudio.org> wrote:
> 
> Hello all,
> 
> Sadly I won't be able to make it to the miniLAC as work keeps
> me in München during the weekend :-(
> For those who'll be there, have a good time !
> 
> Meanwhile I'm trying to understand the following:
> 
> I'm using a Novation LaunchControl (8 pads and 16 rotary controllers).
> 
> When I use it via ALSA sequencer, I get the expected MIDI events:
> note on/off, controller, and sysex.
> 
> When I access it directly as a USB device using libusb, I see
> the expected MIDI data, but with some extra bytes, e.g. (all
> values in hex):
> 
> [09] 90 09 7f  (note on)
> [08] 80 09 00  (note off)
> [0b] b0 15 23  (controller)
> [04] f0 00 20 [04] 29 02 0A [07] 77 00 ff  (sysex)
> 
> where the bytes in [] are the ones that are *not* part of
> the MIDI message.
> 
> Now since things work perfectly with ALSA sequencer without
> required a specific driver, either
> 
> * ALSA knowns about the details of this particular device,
> * or these extra bytes are part of some standard.
> 
> Given that there seems to be one extra byte for every three
> expected ones, could it be that this is some format that
> encodes 24 bits in 32 ? 
> 
> lsusb output for this device is:
> 
> Bus 003 Device 004: ID 1235:0034 Focusrite-Novation 
> Device Descriptor:
>  bLength                18
>  bDescriptorType         1
>  bcdUSB               1.10
>  bDeviceClass            0 
>  bDeviceSubClass         0 
>  bDeviceProtocol         0 
>  bMaxPacketSize0        64
>  idVendor           0x1235 Focusrite-Novation
>  idProduct          0x0034 
>  bcdDevice            0.00
>  iManufacturer           1 Focusrite A.E. Ltd
>  iProduct                2 Launch Control
>  iSerial                 0 
>  bNumConfigurations      1
>  Configuration Descriptor:
>    bLength                 9
>    bDescriptorType         2
>    wTotalLength           82
>    bNumInterfaces          2
>    bConfigurationValue     1
>    iConfiguration          0 
>    bmAttributes         0x80
>      (Bus Powered)
>    MaxPower               60mA
>    Interface Descriptor:
>      bLength                 9
>      bDescriptorType         4
>      bInterfaceNumber        0
>      bAlternateSetting       0
>      bNumEndpoints           0
>      bInterfaceClass         1 Audio
>      bInterfaceSubClass      1 Control Device
>      bInterfaceProtocol      0 
>      iInterface              3 Launch Control
>      AudioControl Interface Descriptor:
>        bLength                 9
>        bDescriptorType        36
>        bDescriptorSubtype      1 (HEADER)
>        bcdADC               1.00
>        wTotalLength            9
>        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              3 Launch Control
>      MIDIStreaming Interface Descriptor:
>        bLength                 7
>        bDescriptorType        36
>        bDescriptorSubtype      1 (HEADER)
>        bcdADC               1.00
>        wTotalLength           46
>      MIDIStreaming Interface Descriptor:
>        bLength                 6
>        bDescriptorType        36
>        bDescriptorSubtype      2 (MIDI_IN_JACK)
>        bJackType               1 Embedded
>        bJackID                 1
>        iJack                   0 
>      MIDIStreaming Interface Descriptor:
>        bLength                 9
>        bDescriptorType        36
>        bDescriptorSubtype      3 (MIDI_OUT_JACK)
>        bJackType               1 Embedded
>        bJackID                 2
>        bNrInputPins            1
>        baSourceID( 0)          1
>        BaSourcePin( 0)         1
>        iJack                   0 
>      Endpoint Descriptor:
>        bLength                 7
>        bDescriptorType         5
>        bEndpointAddress     0x81  EP 1 IN
>        bmAttributes            3
>          Transfer Type            Interrupt
>          Synch Type               None
>          Usage Type               Data
>        wMaxPacketSize     0x0040  1x 64 bytes
>        bInterval               1
>        MIDIStreaming Endpoint Descriptor:
>          bLength                 5
>          bDescriptorType        37
>          bDescriptorSubtype      1 (GENERAL)
>          bNumEmbMIDIJack         1
>          baAssocJackID( 0)       2
>      Endpoint Descriptor:
>        bLength                 7
>        bDescriptorType         5
>        bEndpointAddress     0x02  EP 2 OUT
>        bmAttributes            3
>          Transfer Type            Interrupt
>          Synch Type               None
>          Usage Type               Data
>        wMaxPacketSize     0x0040  1x 64 bytes
>        bInterval               1
>        MIDIStreaming Endpoint Descriptor:
>          bLength                 5
>          bDescriptorType        37
>          bDescriptorSubtype      1 (GENERAL)
>          bNumEmbMIDIJack         1
>          baAssocJackID( 0)       1
> 
> 
> Any info much appreciated !!
> 
> Ciao,
> 
> -- 
> FA
> 
> A world of exhaustive, reliable metadata would be an utopia.
> It's also a pipe-dream, founded on self-delusion, nerd hubris
> and hysterically inflated market opportunities. (Cory Doctorow)
> 
> _______________________________________________
> Linux-audio-dev mailing list
> Linux-audio-dev at lists.linuxaudio.org
> http://lists.linuxaudio.org/listinfo/linux-audio-dev



More information about the Linux-audio-dev mailing list