# Arturia devices Notes about Arturia device support. Arturia doesn't publish any MIDI implementation chart like it is required when you obtain a manufacturer ID for system exclusive messages. This speaks a lot. Thanks to _untergeek_ for his reverse engineering effort: ## SysEx Protocol As of writing, the author has only one device, the _Arturia MiniLab MkII_. Therefor all the observation are made based on that. Most devices have a description file in the vendor driver (_MIDI Control Center_). On macOS it is in `/Library/Arturia/MIDI Control Center/Resources/` with a bunch of JSON file per device. This JSON file contains important information to use for the protocol. Byte values below are in hexadecimal. Arturia has an extended SysEx vendor id of `20 6B`, the _Manufacturer Systen Excluse id_ code is the following 3 bytes: `00 20 6B` everywhere it's applicable. The common format of the SysEx message is: ```text F0 00 20 6B 7F 42 .... F7 ^^^^^^^^ ^^ ^^ | | \---------- The "productId" (JSON) for the device (hexstring) | \------------- Device ID (7F is all) \------------------ Arturia SysEx ID (3 bytes) ``` - `42` is the `productId` in the JSON and seems to encompass a family of products to share the same protocol, in [`v2`]. ### Device inquiry The standard message for device inquiry is supported. The software driver sends the standard device inquiry using the "wildcard" device ID of `7F`. ```text F0 7E 7F 06 01 F7 ``` The controller (MiniLab MkII) replies with the standard response ```text /--- Device ID vv F0 7E 00 06 02 00 20 6B 02 00 04 02 43 07 00 01 F7 ^^^^^^^^ ^^^^^ ^^^^^ ^^^^^^^^^^^ | | | | | \------------------ Family ID | \------------------------ Family Member ID \---------------------------- Arturia SysEx ID 3 bytes ``` | Field | Value | |-------------------------|-------| | SysEx ID | `00 20 6B` Arturia SysEx ID | | Software revision level | `43 07 00 01` last 3 byte match firmware version | | Family ID | `familyId` in the JSON | | Family Member ID | `familyMemberId` in the JSON | ## Generic Arturia SysEx The number after the `:` is the number of bytes. ```text [ ] F7 ``` | Command name | VERB | ARG | | |----------------|------|-----|------------------------------------| | Query | 01 | 00 | \ \ \ | | Report / Write | 02 | 00 | \ \ \ | | Read memory | 05 | nn | | | Write memory | 06 | nn | | Verb 02 is report when sent by the device, and write when sent by the driver application. See [`v2::verb`] for the values. PARAMID is the parameter to set or read. The can be the mode, the command, etc. See [`v2::param`]. The meaning of PARAMID is dependent on context. ITEMID is the ID of the control (CC) VALUE is the value read or to write. buttons or 00 otherwise the value of "deviceGlobalParametersId" for the global parameters of the device or "items.id" for the item / control. ## Button press event Some button send SysEx commands. The report verb is used. ```text 02 00 00 F7 ``` The `VALUE` byte contain the key state. | State | VALUE | |---------|-------| | Press | 7F | | Depress | 00 | The known keys are in the `ITEMID` byte. | Key | ITEMID | |--------------|--------| | Shift | 2E | | Pad 1-8/9-16 | 2F | | Oct - | 10 | | Oct + | 11 | Note: there are possibly other keys on other devices. ## Devices ### MiniLab MkII - `productId` = 42 - `familyId` = `02 00` - `familyMemberId` = `04 02` Firmware: 1.0.7 Can be software updated. USB device: - ID, strangely it has two different product ID. - 0x1c75:0x0289 - 0x1c75:0x2209 - Name: Arturia MiniLab mkII - Manufacturer: Arturia Controls: - 25 keys - 8 pads (16 virtual) - 16 rotary encoders - programmable with SysEx: 8 memories (only 7 programmable) ### Factory reset This will reset the programming 1. unplug USB 2. Hold down Oct - and Oct + 3. plug USB and keep holding until pads turn white 4. Reset is done once pads are off. (about 2 sec.) ### Unknown - Can we query which octave is currently selected? Vendor software doesn't seem to do it, so it might not be possible.