
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 bytesSize (bytes) | Description |
---|---|
1 | SysEx start byte. Always 0xF0 |
3 | Always 0x00, 0x31, 0x32 |
1 | Device ID. Must be equal to the EssenceFM SysEx ID which can be set in Global > MIDI (default is 0x00) |
1 | Model ID. Always 0x00 for EssenceFM |
370 | Voice 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 |
53 | Upper 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 |
1 | SysEx end byte. Always 0xF7 |
Example file: VeloSaw.syx
Voice Structure
Total size = 370 bytesSize (bytes) | Description |
---|---|
23 | Voice name. ASCII format, must be null-terminated (end by 0x00). Not all ASCII characters are supported. |
1 | Category number (0-31) |
1 | Mixer 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. |
1 | Mixer input #2 |
1 | Mixer input #3 |
1 | Mixer input #4 |
1 | Feedback level (0-127) |
1 | LFO delay (0-127) |
1 | LFO speed (0-127) |
1 | LFO attack rate (0-127) |
1 | LFO waveform (0-47) |
1 | LFO start phase offset (0-127) |
1 | Voice volume (0-127) |
1 | OP1 feedback source operator (0-5) |
1 | Voice tuning (-100 ... +100) |
1 | Voice transpose (-60 ... +60) |
1 | Voice Flags bit 0 : LFO mode common bit 5 : LFO phase random bit 7 : LFO midi sync enable |
1 | Scale ID (0-31) |
1 | Filter dry/wet (0-127) |
1 | Filter resonance (0-127) |
13 | Filter envelope |
13 | Panning envelope |
5 | Modulation matrix line #1 |
5 | Modulation matrix line #2 |
5 | Modulation matrix line #3 |
5 | Modulation matrix line #4 |
5 | Modulation matrix line #5 |
5 | Modulation matrix line #6 |
5 | Modulation matrix line #7 |
5 | Modulation matrix line #8 |
43 | Operator #1 data |
43 | Operator #2 data |
43 | Operator #3 data |
43 | Operator #4 data |
43 | Operator #5 data |
43 | Operator #6 data |
4 | Unused |
Envelope Structure
Total size = 13 bytesSize (bytes) | Description |
---|---|
1 | Segment 1 duration (0-127) |
1 | Segment 2 duration (0-127) |
1 | Segment 3 duration (0-127) |
1 | Segment 4 duration (0-127) |
1 | Segment 5 duration (0-127) |
1 | Point 1 vertical position (0-127 for vol/pitch/pan, 0-95 for filter) |
1 | Point 2 vertical position |
1 | Point 3 vertical position |
1 | Point 4 vertical position |
1 | Point 5 vertical position |
1 | Point 6 vertical position |
1 | Envelope 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 |
1 | Envelope 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 bytesSize (bytes) | Description |
---|---|
1 | Source ID |
1 | Destination ID |
1 | Offset (-127, +127) |
2 | Ratio (-400, +400) |
Operator Structure
Total size = 43 bytesSize (bytes) | Description |
---|---|
1 | Output terminal connector (-1 : operator is a modulator, >=0 : operator is a carrier at the specified position (0-5)) |
1 | Input operator terminal #1 (-1 : not connected, >=0 : connected to the specified operator’s output) |
1 | Input operator terminal #2 (-1 : not connected, 6 : connected to mixer’s output, 0-5 : connected to the specified operator’s output) |
1 | Multiplier (0-40) |
1 | Quartertones (0-24) |
1 | Fine (-100, +100) |
1 | Volume (0-127) |
13 | Volume envelope |
13 | Pitch envelope |
1 | Key scale center note (0-127) |
1 | Key scale left ratio (0-63) |
1 | Key scale right ratio (0-63) |
1 | Velocity sensitivity (-127, +127) |
1 | LFO AM (0-127) |
1 | LFO FM (0-127) |
1 | Waveform (0-47) |
1 | Operator 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 |
1 | Start 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 |