EssenceFM Voice SysEx Format

Back to the main page

This document describes the format used by the Kodamo EssenceFM to receive voice data through SysEx MIDI messages. To allow reception, the EssenceFM must be on the Voice page. When SysEx data is received, the user interface is updated and the new sound is ready to be played. Voice SysEx only works on EssenceFM firmware v5.2 and later.

DISCLAIMER : Sending incorrect data may crash the EssenceFM. This document is provided « as is » and may not be 100 % accurate. Use it at your own risk. Most mistakes can be recovered by simply power cycling the EssenceFM. Do not attempt to save a Voice that was incorrectly transmitted.

SysEx Message Structure

Total size = 430 bytes

Size (bytes)Description
1SysEx start byte. Always 0xF0
3Always 0x00, 0x31, 0x32
1Device ID. Must be equal to the EssenceFM SysEx ID which can be set in Global > MIDI (default is 0x00)
1Model ID. Always 0x00 for EssenceFM
370Voice data (see below, « Voice Structure »). All bytes must have their upper bit removed by doing byte = byte & 0x7F to ensure voice data cannot have bytes that are interpreted as other MIDI commands
53Upper bits for all previous 370 bytes. Each of the 53 bytes hold 7 upper bits. Last byte has some unused bits since 370/7 isn't a round number
1SysEx end byte. Always 0xF7

Example file: VeloSaw.syx

Voice Structure

Total size = 370 bytes

Size (bytes)Description
23Voice name. ASCII format, must be null-terminated (end by 0x00). Not all ASCII characters are supported.
1Category number (0-31)
1Mixer input #1. Mixer is a special, invisible operator in the EssenceFM that allows to mix (sum) up to 4 operators' outputs. Mixer is used when the user creates an algorithm with more than two operators feeding into one. It is mandatory in that case, since operators have just 2 inputs so adding this mixer inbetween allows to circumvent the limitation. For each mixer input : -1 is empty, >=0 is the ID of the operator (0-5) to connect its output to the mixer.
1Mixer input #2
1Mixer input #3
1Mixer input #4
1Feedback level (0-127)
1LFO delay (0-127)
1LFO speed (0-127)
1LFO attack rate (0-127)
1LFO waveform (0-47)
1LFO start phase offset (0-127)
1Voice volume (0-127)
1OP1 feedback source operator (0-5)
1Voice tuning (-100 ... +100)
1Voice transpose (-60 ... +60)
1Voice Flags
bit 0 : LFO mode common
bit 5 : LFO phase random
bit 7 : LFO midi sync enable
1Scale ID (0-31)
1Filter dry/wet (0-127)
1Filter resonance (0-127)
13Filter envelope
13Panning envelope
5Modulation matrix line #1
5Modulation matrix line #2
5Modulation matrix line #3
5Modulation matrix line #4
5Modulation matrix line #5
5Modulation matrix line #6
5Modulation matrix line #7
5Modulation matrix line #8
43Operator #1 data
43Operator #2 data
43Operator #3 data
43Operator #4 data
43Operator #5 data
43Operator #6 data
4Unused

Envelope Structure

Total size = 13 bytes

Size (bytes)Description
1Segment 1 duration (0-127)
1Segment 2 duration (0-127)
1Segment 3 duration (0-127)
1Segment 4 duration (0-127)
1Segment 5 duration (0-127)
1Point 1 vertical position (0-127 for vol/pitch/pan, 0-95 for filter)
1Point 2 vertical position
1Point 3 vertical position
1Point 4 vertical position
1Point 5 vertical position
1Point 6 vertical position
1Envelope Flags #1
bits 0-3 : sustain point ID (0-5, 6 = no sustain)
bits 4-6 : total number of points in envelope (2-6)
bit 7 : skip on release
1Envelope Flags #2
bits 0-2 : loop start point ID (0-5, 6 = no loop start)
bits 3-5 : loop end point ID (0-5, 6 = no loop end)
bit 7 : envelope mode (0=exponential, 1=linear)

Modulation matrix line structure

Total size = 5 bytes

Size (bytes)Description
1Source ID
1Destination ID
1Offset (-127, +127)
2Ratio (-400, +400)

Operator Structure

Total size = 43 bytes

Size (bytes)Description
1Output terminal connector (-1 : operator is a modulator, >=0 : operator is a carrier at the specified position (0-5))
1Input operator terminal #1 (-1 : not connected, >=0 : connected to the specified operator’s output)
1Input operator terminal #2 (-1 : not connected, 6 : connected to mixer’s output, 0-5 : connected to the specified operator’s output)
1Multiplier (0-40)
1Quartertones (0-24)
1Fine (-100, +100)
1Volume (0-127)
13Volume envelope
13Pitch envelope
1Key scale center note (0-127)
1Key scale left ratio (0-63)
1Key scale right ratio (0-63)
1Velocity sensitivity (-127, +127)
1LFO AM (0-127)
1LFO FM (0-127)
1Waveform (0-47)
1Operator Flags
bit 0 : frequency mode (0 = multiplier, 1 = fixed). In fixed mode, Multiplier and Quartertones bytes are used to determine the frequency
bit 1 : phase mode random
bit 2 : mute
bits 3-5 : pitch envelope range (0 = tone, 1 = quint, 2 = octave, 3 = 2 octaves, 4 = 3 octaves, 5 = 4 octaves, 6 = 8 octaves)
bit 6 : phase mode free running
1Start phase offset (0-127)
1"Spare byte"
For OP1 : used as « LFO waveform mask (0-12) »
For OP2 : used as « LFO MIDI sync ratio (0-32) »
For OP3 : used as « filter high pass/low pass (0-127) »
Unused in other operators