Backing up the Elektron Monomachine

The official way of backing up the monomachine is to use Elektron’s sysex application, C6 and trigger a memory dump. The workflow to do this is something like this:

  • Open up C6
  • Click “recieve” in C6
  • Navigate to the global menu on the monomachine
  • Find the submenu for “sysex send” and click “send”
  • Watch and wait for the dump to complete
  • In C6 manually click “stop” and then “save”
  • And finally click “exit” on the monomachine to get back to what you were doing

Finding this process rather tedious and reguarly not making backups I decided to come up with a quicker way of performing these dumps.

Sysex

Sysex stands for “System exclusive” and is essentially a format for sending arbitrary data over midi. A sysex message must start with 0xf0 and must end with 0xf7 and thats pretty much it.

The monomachine sysex messages start with five more bytes to become:

0xf0 0x00 0x20 0x3c 0x03 0x00

The start message is followed by a “command” byte that specifies the operation and followed with some data (if neccesary). At the back of the user manual is a reference for all the commands and the expected data.

A complete message would follow this pattern:

0xf0 0x00 0x20 0x3c 0x03 0x00 cmd data 0xf7

The approach

I started off by taking a peak at what was in the sysex file created by C6. For a full dump there was a total of 288 messages:

  • 128 messages with a command byte of 0x52
  • 128 messages with a command byte of 0x67
  • 24 messages with a command byte of 0x69
  • 8 messages with a command byte of 0x50

A quick look at the manual and it was clear these were the bytes for kits, patterns, songs and global settings (and in that order).

Spurred on, my next step was to write a program to connect to a midi device and recieve these sysex messages (whilst still manually triggering it from the monomachine). This went smoothly until I compared the file I managed to create with that generated by C6

Looking at the diff of a hex dump of the two files, mine seemed to contain odd bytes at seemingly random places with the subsequent bytes being equal but offset by the wrong byte. One of the troublesome bytes was 0xf8, a quick google search of “midi 0xf8” brought up the midi clock specification page as the very first hit... deciding to filter out all midi clock bytes the files finally became equal.

The next step was to request the data dump from the monomachine, this is simply a matter of sending the right command byte (see the back of the user manual) followed by the ID of the item, so to dump all 128 patterns, 128 messages need to be sent with a command byte of 0x68 followed by a number from 0 - 127.

I now had a script that when run could dump all kits, patterns, songs & settings to a file without clicking through menus on two different machines!

Very pleased, but not quite happy with the thought of having lots of very small files hanging around my machine I decided to store this dumped data into a sqlite database along with some extra information about each dump.

Restoring the data then became as simple as selecting a dump from the database, splitting the data back into the sysex messages and sending them back over. This is the only point where you have to manually do something on the monomachine (set it to recieve sysex events)!

The program

The packaged up python script can be found here and installed by running:

pip install mmb