Skip to content

Instantly share code, notes, and snippets.

@rumblesan
Created July 3, 2020 20:12
Show Gist options
  • Save rumblesan/e520ae4099d0583e3ef4e228beabe2b3 to your computer and use it in GitHub Desktop.
Save rumblesan/e520ae4099d0583e3ef4e228beabe2b3 to your computer and use it in GitHub Desktop.

Digipro SYSEX Format

Always 7027 bytes total

Start Value Bytes Description

0 0xF0 1 SYSEX Start 1 0x00 1 Europe/USA ID 2 0x20 1 Europe ID 3 0x3C 1 Elektron Music Machines MAV ID 4 0x03 1 Monomachine ID 5 0x00 1 Base Channel (Padding)

6 0x5D 1 Digipro waveform dump ID

7 0x01 1 Version 8 0x01 1 Revision

9 1 Wave Position in Digipro manager (0x00 to 0x3F)

10 4 ASCII Name

14 7008 Bytes of payload data

7022 1 Checksum (bit 7 to 13) 7023 1 Checksum (bit 0 to 6)

7024 0x36 1 Message length (bit 7 to 13) 7025 0x69 1 Message length (bit 0 to 6)

7026 0xF7 1 SYSEX end

Payload

Payload is encoded into 876 packets of 8 bytes each, with each packet encoding 7 bytes of the waveform data.

The first bit of each byte is always zero due to sysex constraints and the first byte of the packet contains just the MSB bits for the remaining 7 data bytes that had to be dealt with because of this.

Decoding Example

Given the following 8 bytes of payload data: 0x4D 0x1A 0x0A 0x0A 0x43 0x19 0x0A 0x67

The first byte 0x4D would be 0100 1101 as binary, so ignoring bit 1, that means that the unpacking would look like this.

payload byte | byte number | | msb bit | | | binary decoded | | | | | v v v v v 0x1A 1 1 0001 1010 0x9A 0x0A 2 0 0000 1010 0x0A 0x0A 3 0 0000 1010 0x0A 0x43 4 1 0100 0011 0xC3 0x19 5 1 0001 1001 0x99 0x0A 6 0 0000 1010 0x0A 0x67 7 1 0110 0111 0x87

In this way, the payload actually encodes 6132 bytes of waveform data.

Waveform Data

The Waveform data seems to have three sections, with the bytes interleaved with one another.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment