# SysEx implementation

Electra One MIDI controller can be configured, programmed, and controlled with two different communication protocols:

  • SysEx MIDI messages
  • low-level USB Raw HID

This document describes the essential data exchange and control commands using the SysEx message format over the USB MIDI interface.

Note

Firmware version 3.1 or later is required to have all the SysEx messages listed in this document supported.

# Manufacturer SysEx Id

All SysEx messages must carry information about the manufacturer. Electra One uses the MIDI association Manufacturer SysEx Id of Electra One s.r.o.

0x00 0x21 0x45

# The management port

All Electra One SysEx messages are identified with the Electra One Manufacturer SysEx Id. The messages can be exchanged on any of Electra's USB device interface ports. It is recommended, however, to use Electra Controller CTRL port whenever it is possible. Using the Electra Controller CTRL separates Electra management SysEx messages from other MIDI traffic. The Electra Controller CTRL port is sometimes listed as MIDIIN3 (Windows) or PORT 3 (Linux).

Responses to requests are always transmitted on the same USB device port where the original request was sent to. The event notifications triggered by user activity on the controller are transmitted on the Electra Controller CTRL port by default. This can be overridden by setting different port for the event notifications, see Set the MIDI port for UI events.

# Request / Response handshake

Electra One uses simple request - response protocol for exchanging data. The requests can be divided into two groups:

  • data queries
  • commands

For data queries, Electra One responds by providing the requested data in JSON format. For commands, Electra responds with ACK / NACK response. ACK (acknowledged) is sent back when command was successfully performed, otherwise NACK (not-acknowledged) is sent.

# Querying data from the controller

A set of commands to retrieve information from the controller. The information may be either runtime data, static data, or various files stored in the controller.

# Get an Electra info

Electra One MIDI controller can provide info about the hardware and currently loaded firmware on a request. This call comes in handy if you need to find out if connected Electra is working correctly and get information about the firmware it runs.

For example, the Electra App account and Electra Editor use this call to verify that Electra One controller is connected correctly and display the connection indicator.

# Request

0xF0 0x00 0x21 0x45 0x02 0x7F 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x02 Query data
  • 0x7F Electra information
  • 0xF7 SysEx closing byte

# Response

0xF0 0x00 0x21 0x45 0x01 0x7F info-json-data 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x01 Data dump
  • 0x7F Electra information
  • info-json-data JSON document with info about Electra (see below)
  • 0xF7 SysEx closing byte

Detailed information about info-json-data is provided at (to be done).

# An example of info-json-data
{
   "versionText": "v1.5.11",
   "versionSeq": 100501100,
   "serial": "EO-123456",
   "hwRevision": "2.30"
}

# Get a run-time information

A request call to fetch the run-time information from the Electra firmware. Only the information about free memory is included at the present time.

# Request

0xF0 0x00 0x21 0x45 0x02 0x7E 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x02 Query data
  • 0x7E Run-time information
  • 0xF7 SysEx closing byte

# Response

0xF0 0x00 0x21 0x45 0x01 0x7E runtime-json-data 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x01 Data dump
  • 0x7E Run-time information
  • runtime-json-data JSON document with info about run-time data
  • 0xF7 SysEx closing byte

Detailed information about runtime-json-data is provided at (to be done).

# An example of runtime-json-data
{
   "freePercentage": 85
}

# Get a preset

A request to fetch a preset that is active in the controller.

# Request

0xF0 0x00 0x21 0x45 0x02 0x01 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x02 Query data
  • 0x01 Preset file
  • 0xF7 SysEx closing byte

# Response

0xF0 0x00 0x21 0x45 0x01 0x01 preset-json-data 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x01 Data dump
  • 0x01 Preset file
  • preset-json-data JSON document with info about Electra (see below)
  • 0xF7 SysEx closing byte

Electra One MIDI controller responds with the SysEx message that has exactly the same format as the Preset upload message. Thus, a SysEx message downloaded with the Get preset call can be used to upload the preset to Electra later on.

This call always downloads a preset that is currently selected and active in the controller.

Detailed information about preset-json-data is provided at Preset format description

# An example of preset-json-data
{
   "version": 2,
   "name": "ADSR Test",
   "projectId": "d8WjdwYrP3lRyyx8nEMF",
   "pages": [
   ],
   "devices": [
   ],
   "overlays": [
   ],
   "groups": [
   ],
   "controls": [
   ]
}

# Get an Electra configuration

A request call to fetch current Electra One configuration.

# Request

0xF0 0x00 0x21 0x45 0x02 0x02 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x02 Query data
  • 0x02 Configuration file
  • 0xF7 SysEx closing byte

# Response

0xF0 0x00 0x21 0x45 0x01 0x02 configuration-json-data 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x01 Data dump
  • 0x02 Configuration file
  • configuration-json-data JSON document with info about Electra (see below)
  • 0xF7 SysEx closing byte

Detailed information about configuration-json-data is provided at Configuration format description

# An example of configuration-json-data
{
   "version": 1,
   "router": {
      "usbDevToMidiIo": true,
      "usbDevToUsbHost": true,
      "midiIoToUsbDev": true,
      "midiIoToUsbHost": true,
      "usbHostToMidiIo": true,
      "usbHostToUsbDev": true,
      "electraToMidiIo": true,
      "electraToUsbHost": true,
      "electraToUsbDev": true
   },
   "presetBanks": [
     {
        "id": 1,
        "name": "FX UNITS",
        "color": "FFFFFF"
     },
     {
        "id": 2,
        "name": "SAMPLERS",
        "color": "529DEC"
     }
   ],
   "usbHostAssigments": [
     {
        "pattern": "launchpad",
        "port": 3
     }
   ],
   "midiControl": [
     {
        "event": "switchPreset",
        "eventParameter": 1,
        "midiMessage": "program",
        "parameterNumber": 1
     }
   ]
}

# Get a list of presets

A request call to fetch a list of all presets stored in the controller.

# Request

0xF0 0x00 0x21 0x45 0x02 0x04 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x02 Query data
  • 0x04 Preset list
  • 0xF7 SysEx closing byte

# Response

0xF0 0x00 0x21 0x45 0x01 0x04 preset-list-json-data 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x01 Data dump
  • 0x04 Preset list
  • preset-list-json-data JSON document with a list of presets
  • 0xF7 SysEx closing byte
# An example of preset-list-json-data
{
   "version": 1,
   "presets": [
      {
         "slot": 0,
         "bankNumber": 0,
         "name": "Access Virus A",
         "projectId": "jbTgBV9Sv7FFXossyeTh"
      },
      {
         "slot": 1,
         "bankNumber": 0,
         "name": "Yamaha TG33",
         "projectId": "kLyMO8PSlUicXM5lwsuR"
      }
   ]
}

# Get a list of snapshots

A request call to fetch a list of snaphots of an active preset.

# Request

0xF0 0x00 0x21 0x45 0x02 0x05 snaphost-list-request-json-data 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x02 Query data
  • 0x05 Snaphost list
  • snapshot-list-request-json-data
  • 0xF7 SysEx closing byte

Detailed information about snapshot-list-request-json-data is provided at (to be done).

# An example of snapshot-list-request-json-data
{
  "projectId": "kLyMO8PSlUicXM5lwsuR"
}

# Response

0xF0 0x00 0x21 0x45 0x01 0x05 snapshot-list-json-data 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x01 Data dump
  • 0x05 Snapshot list
  • snapshot-list-json-data JSON document with a list of snapshots
  • 0xF7 SysEx closing byte
# An example of snapshot-list-json-data
{
   "version": 1,
   "projectId": "kLyMO8PSlUicXM5lwsuR",
   "snapshots": [
      {
         "slot": 5,
         "bankNumber": 0,
         "name": "Fantasia",
         "color": "00C232"
      }
   ]
}

# Get a Lua script

A request call to download Lua script that is currently stored in the controller.

# Request

0xF0 0x00 0x21 0x45 0x02 0x0C 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x02 Query data
  • 0x0C Lua script file
  • 0xF7 SysEx closing byte

# Response

0xF0 0x00 0x21 0x45 0x01 0x0C script-source-code 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x01 Data dump
  • 0x0C Lua Script file
  • script-source-code bytes representing a source code of the Electra One Lua script application
  • 0xF7 SysEx closing byte

Detailed information about developing Lua script applications is provided at Electra One Lua script documentation.

# An example of script-source-code
-- Demo application

-- the Setup
clockCounter = 0
beatEnabled = 0


-- User functions
function myPrint (text)
    print ("my Lua: " .. text)
end


-- Standard callbacks
function midi.onClock (midiInput)
    if beatEnabled == 1 then
        if math.mod (clockCounter, 24) == 0 then
            myPrint ("midi beat received: interface=" .. midiInput.interface)
        end
    end
    clockCounter = clockCounter + 1
end

function onButtonDown (buttonId)
    myPrint ("button " .. buttonId .. " pressed")

    if buttonId == BUTTON_1 then
        myPrint ("Beat enabled")
        beatEnabled = 1
    elseif buttonId == BUTTON_4 then
        myPrint ("Beat disabled")
        beatEnabled = 0
    end
end

# Get an application information

A request call to fetch information about current application and preset.

# Request

0xF0 0x00 0x21 0x45 0x02 0x7C 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x02 Query data
  • 0x7C Application information
  • 0xF7 SysEx closing byte

# Response

0xF0 0x00 0x21 0x45 0x01 0x7C app-info-json-data 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x01 Data dump
  • 0x7C Application info
  • app-info-json-data JSON document with an application info
  • 0xF7 SysEx closing byte
# An example of app-info-json-data
{
   "app": "ctrlv2",
   "preset": "Alesis Micron"
}

# Uploading data to the controller

A set of commands to upload files to the controller.

# Upload a preset

The preset upload call is meant to upload a new preset to the Electra One MIDI controller. The preset is always loaded to a currently selected preset slot (out of 72 preset slots supported). Once the preset is uploaded, it is activated immediately and the user may use it.

0xF0 0x00 0x21 0x45 0x01 0x01 preset-json-data 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x01 Upload data
  • 0x01 Preset file
  • preset-json-data bytes representing ascii bytes of the preset file
  • 0xF7 SysEx closing byte

Detailed information about preset-json-data is provided at Preset format description

# Upload a configuration

The configuration upload call is meant to upload and apply a new Electra One configuration to the controller.

0xF0 0x00 0x21 0x45 0x01 0x02 configuration-json-data 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x01 Upload data
  • 0x02 Configuration file
  • configuration-json-data bytes representing ascii bytes of the configuration file
  • 0xF7 SysEx closing byte

Detailed information about configuration-json-data is provided at Configuration format description

# Upload a Lua script

The Lua script upload call is meant to upload and execute a new Electra One Lua script.

0xF0 0x00 0x21 0x45 0x01 0x0C script-source-code 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x01 Upload data
  • 0x0C Lua Script file
  • script-source-code bytes representing a source code of the Electra One Lua script application
  • 0xF7 SysEx closing byte

Detailed information about developing Lua script applications is provided at Electra One Lua script documentation.

# Controller events

Controller events are sent by the controller to the host. The primary goal is to keep the host computer informed about important events taking place in the controller.

# NAK

Not acknowledged. Informs the host that the last operation did not succeed.

0xF0 0x00 0x21 0x45 0x7E 0x00 0x00 0x00 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x7E Controller event
  • 0x00 NAK (not acknowledged)
  • 0x00 reserved
  • 0x00 reserved
  • 0xF7 SysEx closing byte

# ACK

Acknowledged. Informs the host that the last operation was successfully completed.

0xF0 0x00 0x21 0x45 0x7E 0x01 0x00 0x00 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x7E Controller event
  • 0x01 ACK (acknowledged)
  • 0x00 reserved
  • 0x00 reserved
  • 0xF7 SysEx closing byte

# Preset switch

Informs the host that the user changed the preset on the controller.

0xF0 0x00 0x21 0x45 0x7E 0x02 bank-number slot 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x7E Controller event
  • 0x02 Preset switch
  • bank-number Current preset slot (0 .. 5)
  • slot Current preset slot (0 .. 11)
  • 0xF7 SysEx closing byte

# Snapshot list change

Informs the host that the list of snapshots has been modified. It is sent out when a snapshot is added, modified, or removed.

0xF0 0x00 0x21 0x45 0x7E 0x03 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x7E Controller event
  • 0x03 Snapshot list change
  • 0xF7 SysEx closing byte

# Pot touch

Informs the host that the user touched or released the pot (knob)

0xF0 0x00 0x21 0x45 0x7E 0x04 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x7E Controller event
  • 0x0A Pot touch activity
  • pot-id an identifier of the pot (0 .. 11)
  • control-id-lsb a LSB of a controlId
  • control-id-msb a MSB of a controlId
  • touched is set to true for initial touch, and false when pot is released
  • 0xF7 SysEx closing byte

# Preset list change

Informs the host that the list of presets has been modified. It is sent out when a preset is added, modified, or removed.

0xF0 0x00 0x21 0x45 0x7E 0x05 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x7E Controller event
  • 0x05 Preset list change
  • 0xF7 SysEx closing byte

# Page switch

Informs the host that the user changed the active page.

0xF0 0x00 0x21 0x45 0x7E 0x06 page-number 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x7E Controller event
  • 0x06 Page switch
  • page-id Current page number as defined in the preset (0 .. 11)
  • 0xF7 SysEx closing byte

# Control set switch

Informs the host that the user changed the active control set.

0xF0 0x00 0x21 0x45 0x7E 0x07 control-set-number 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x7E Controller event
  • 0x07 Control set switch
  • control-set-number Current active control set (0 .. 2)
  • 0xF7 SysEx closing byte

# Preset bank switch

Informs the host that the user changed the preset bank.

0xF0 0x00 0x21 0x45 0x7E 0x08 preset-bank-number 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x7E Controller event
  • 0x08 preset bank switch
  • preset-bank-number Current page number (0 .. 5)
  • 0xF7 SysEx closing byte

# USB Host change notification

Informs the host that a new device was connected or an existing device was disconnected from the USB Host port.

0xF0 0x00 0x21 0x45 0x7E 0x08 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x7E Controller event
  • 0x08 USB Host change
  • 0xF7 SysEx closing byte

# Snapshot change

Informs the host that the user made change regarding the snapshots. Upon receiving this event the host might want to query the snapshot list information.

0xF0 0x00 0x21 0x45 0x7E 0x03 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x7E Controller event
  • 0x03 Snapshot change
  • 0xF7 SysEx closing byte

# Snapshot bank switch

Informs the host that the user changed current snapshot bank.

0xF0 0x00 0x21 0x45 0x7E 0x04 bank-number 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x7E Controller event
  • 0x04 Snapshot bank switch
  • bank-number Snapshot bank (0 .. 11)
  • 0xF7 SysEx closing byte

# Midi learn info

When Electra has the MIDI learn enabled it sends a MIDI message with description of MIDI messages received on user ports to.

0xF0 0x00 0x21 0x45 0x03 midilearn-json-data 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x03 Midi learn
  • midilearn-json-data a JSON data that describe detected MIDI message
  • 0xF7 SysEx closing byte

Detailed information about midilearn-json-data is provided at (to be done)

# An example of midilearn-json-data

non-SysEx:

{
   "port": 0,
   "msg": "cc7",
   "channel": 2,
   "parameterId": 10,
   "value": 119
}

SysEx:

{
   "port": 0,
   "msg": "sysex",
   "data": [ 67, 32, 0 ]
}

# Log message

A log message is a text that is transmitted to the host computer in order to provide the user with information what is happening in the controller. The log messages are generated either by the firmware or user's Lua script.

0xF0 0x00 0x21 0x45 0x7F 0x00 log-message 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x7F System call
  • 0x00 Log message
  • log-message ASCII bytes representing the log message
  • 0xF7 SysEx closing byte

The log-message is a text string that start with a number representing milliseconds from the start of the controller, followed by the space, and then the text of the message.

# An example of log-message
147362 ElectraApp: preset successfully loaded

# Persistent commands

Persistent command make changes to the data stored in the controller. This means that all changes made with persistent commands will be effective even if the controller is power-recycled.

# Snapshot update

A call to update snapshot attributes.

0xF0 0x00 0x21 0x45 0x04 0x06 snapshot-json-data 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x04 Update command
  • 0x06 Snapshot
  • snapshot-json-data Snapshot JSON data
  • 0xF7 SysEx closing byte

Detailed information about snapshot-json-data is provided at (to be done)

# An example of the snapshot-json-data
{
   "projectId": "SCI1mU1v6ojnm8IojuhY",
   "bankNumber": 0,
   "slot": 5,
   "name": "House piano",
   "color": "E4660E"
}

# Snapshot remove

A call to permanently remove a snapshot.

0xF0 0x00 0x21 0x45 0x05 0x06 snapshot-id-json-data 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x05 Remove command
  • 0x06 Snapshot
  • snapshot-id-json-data Snapshot identification JSON data
  • 0xF7 SysEx closing byte

Detailed information about snapshot-id-json-data is provided at (to be done)

# An example of the snapshot-json-data
{
   "projectId": "SCI1mU1v6ojnm8IojuhY",
   "bankNumber": 2,
   "slot": 5
}

# Snapshot swap

A call to swap snapshots in two snapshot slots. If one of the slots is empty, it becomes a simple move action.

0xF0 0x00 0x21 0x45 0x06 0x06 snapshot-ids-json-data 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x06 Swap command
  • 0x06 Snapshot
  • snapshot-ids-json-data
  • 0xF7 SysEx closing byte

Detailed information about snapshot-ids-json-data is provided at (to be done)

# An example of the snapshot-json-data
{
   "projectId": "SCI1mU1v6ojnm8IojuhY",
   "fromBankNumber": 0,
   "fromSlot": 5,
   "toBankNumber": 0,
   "toSlot": 4
}

# Preset remove

A call to permanently remove a preset identified with the bankNumber and a preset slot.

0xF0 0x00 0x21 0x45 0x05 0x01 bank-number slot 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x05 Remove command
  • 0x01 Preset
  • bank-number an identifier of the preset bank (0 .. 5)
  • slot an identifier of the preset slot (0 .. 11)
  • 0xF7 SysEx closing byte

# Lua script remove

A call to permanently remove a Lua script identified with the bankNumber and a slot.

0xF0 0x00 0x21 0x45 0x05 0x0C bank-number slot 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x05 Remove command
  • 0x0C Lua script
  • bank-number an identifier of the preset bank (0 .. 5)
  • slot an identifier of the preset slot (0 .. 11)
  • 0xF7 SysEx closing byte

# Config file remove

A call to permanently remove a configuration file.

0xF0 0x00 0x21 0x45 0x05 0x02 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x05 Remove command
  • 0x02 Configuration file
  • 0xF7 SysEx closing byte

# Load preloaded preset

A call to provision a preset slot with a preloaded preset.

0xF0 0x00 0x21 0x45 0x04 0x08 preset-slot-json-data 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x04 Update command
  • 0x08 Preset slot
  • preset-slot-json-data Preset slot update JSON data
  • 0xF7 SysEx closing byte

Detailed information about preset-slot-json-data is provided at (to be done)

# An example of the preset-slot-json-data
{
   "bankNumber": 5,
   "slot": 1,
   "preset": "xot/ableton/Cabinet"
}

# Runtime commands

The runtime command modify the behaviour of the controller at the runtime but do not make permanent changes.

# Switch preset slot

A call to switch the active preset slot. If the slot is in use, the preset is loaded. When empty, the slot is selected and preset can be subsequently loaded there.

0xF0 0x00 0x21 0x45 0x09 0x08 bank-number slot 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x09 Switch command
  • 0x08 Preset slot
  • bank-number an identifier of the preset bank (0 .. 5)
  • slot an identifier of the preset slot (0 .. 11)
  • 0xF7 SysEx closing byte

# Switch page

A call to switch the active page.

0xF0 0x00 0x21 0x45 0x09 0x0A page-number 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x09 Switch command
  • 0x0A Page
  • page-number an identifier of the page (0 .. 11)
  • 0xF7 SysEx closing byte

# Switch control set

A call to change the active control set.

0xF0 0x00 0x21 0x45 0x09 0x0B control-set-id 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x09 Switch command
  • 0x0B Control set
  • control-set-id an identifier of the page (0 .. 2)
  • 0xF7 SysEx closing byte

# Midi learn enable / disable

A call to enable or disable the MIDI learn functionality on the controller. When enabled, the controller will send MIDI learn messages back to the host for all incoming MIDI messages.

0xF0 0x00 0x21 0x45 0x03 status 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x03 Midi Learn
  • status desired state of the MIDI learn functionality (see below)
  • 0xF7 SysEx closing byte

status

  • 0x00 disable the MIDI learn
  • 0x01 enable the MIDI learn

# Logger enable / disable

A system call that is used to control whether or not Electra sends the debugging log messages. The command controls a non-volative flag in the controller. The status of the logger stays set even after powering the controller off. The start-up log messages are, however, always sent without taking the logger status in account.

0xF0 0x00 0x21 0x45 0x7F 0x7D status 0x00 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x7F System call
  • 0x7D Logger status change
  • status desired state of the logger (see below)
  • log-level level of verbosity of log messages (0 .. 3)
  • 0xF7 SysEx closing byte

status

  • 0x00 disable the logger
  • 0x01 enable the logger

log-level sets the verbosity of log messages sent by the Electra One controller. Higher log levels add extra messages to stream of log messages. The log-level parameter is ignored when the status parameter is set to 0x00.

  • 0x00 critical messages and errors only
  • 0x01 warning messages
  • 0x02 informative messages
  • 0x03 tracing messages

# Execute Lua command

A call to run an arbitrary Lua command.

0xF0 0x00 0x21 0x45 0x08 0x0D lua-command-text 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x08 Execute command
  • 0x0D Lua command
  • lua-command-text ASCII bytes representing the Lua command
  • 0xF7 SysEx closing byte

The lua-command-text is free form string containing Lua command to be executed. The maximum length is limited to 128 characters. It is recommended to call predefined functions.

# An example of the lua-command-text
hideControl (1)

or

print ("Hello MIDI world!")

# Control update

A call to update the name, color, and visibility of the control. The change is made only at the run-time, it means it is lost when the Electra is powered off.

0xF0 0x00 0x21 0x45 0x14 0x07 control-id-lsb control-id-msb control-upadate-json-data 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x14 Update runtime command
  • 0x07 Control
  • control-id-lsb a LSB of a controlId
  • control-id-msb a MSB of a controlId
  • control-update-json-data
  • 0xF7 SysEx closing byte

The controlId is decomposed to LSB and MSB part as:

control-id-msb = controlId >> 7
control-id-lsb = controlId & 0x7F

The control-update-json-data may consist of four optional attributes name, color, visibility, and label. Upon receiving the control update command the fields will be set accordingly. It is possible send only attributes that need to be changed.

# An example of the control-json-data

change all attrinbutes:

{
   "name": "Track 1",
   "color": "FFFFFF",
   "visible": true
}

one attribute only:

{
   "name": "Track 2"
}

overriding a value text:

{
   "value": {
       "id": "value",
       "text": "6.2dB"
   }
}

Note, when overriding a value text the "id": "value" is not required for single value controls, such as faders, pads, and relative controls. Setting the "text" attribute to an empty string will cancel the override. When cancelled, the controller will display the current value according to its settings.

# Override value text

Even though the value texts can be overridden with the Control update command, the SysEx API offers another, more performance oriented, call. The Set value text command delivers the update functionality without JSON parsing and valueId translation.

0xF0 0x00 0x21 0x45 0x14 0x0E control-id-lsb control-id-msb numeric-value-id text 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x14 Update runtime command
  • 0x0E Override text value
  • control-id-lsb a LSB of a controlId
  • control-id-msb a MSB of a controlId
  • numeric-value-id a numeric identifier of the value within the control
  • text a text string to be displayed as value
  • 0xF7 SysEx closing byte

The controlId is decomposed to LSB and MSB part as:

control-id-msb = controlId >> 7
control-id-lsb = controlId & 0x7F

The numeric-value-id identifies Electra's MIDI port as follows:

  • 0x00 default value of single value controls (fader, pads, and relative controls)
  • 0x01 - 0x10 other values such as individual ADSR values. Details will be provided later.

The text is text string of printable ASCII characters, maximum length is 15 characters. Setting the text string with 0 bytes length cancels the value override. When cancelled, the controller will display the current value according to its settings.

# Set the MIDI port for Controller events

A call to set a MIDI port that will be used to transmit event notifications on user actions done on the controller, eg. page switching.

0xF0 0x00 0x21 0x45 0x14 0x7B port-number 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x14 Update runtime command
  • 0x7B Select the port to transmit UI driven events on
  • port-number a MIDI port to be used
  • 0xF7 SysEx closing byte

The port-number identifies Electra's MIDI port as follows:

  • 0x00 Port 1
  • 0x01 Port 2
  • 0x02 CTRL

# Subscribe Controller events

A call to set what user events will be emitted to the host.

0xF0 0x00 0x21 0x45 0x14 0x7B port-number 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x14 Update runtime command
  • 0x79 Select the port to transmit UI driven events on
  • event-flags a byte where each bit represents specific type of event
  • 0xF7 SysEx closing byte

The event-flags a byte with the following bits (flags). The individual flags must be ORed to produce the final byte value:

  • 0x01 (bit 0) Page events
  • 0x02 (bit 1) Control set events
  • 0x04 (bit 2) USB Host events
  • 0x08 (bit 3) Pots events
  • 0x10 (bit 4) Touch events
  • 0x20 (bit 5) Button events
  • 0x40 (bit 6) Window events

Note, currently only Page events and Pots events are supported.

# Set the MIDI port for logger

A call to set a MIDI port that will be used to transmit log messages.

0xF0 0x00 0x21 0x45 0x14 0x7D port-number reserved 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x14 System call
  • 0x7D Select the port to transmit log messages on
  • port-number a MIDI port to be used
  • reserved an optional parameter. It is not currently used.
  • 0xF7 SysEx closing byte

The port-number identifies Electra's MIDI port as follows:

  • 0x00 Port 1
  • 0x01 Port 2
  • 0x02 CTRL

# Control the window repaint process

Control over the window repainting. Currently, window commands allow users to efficiently execute larger batches of control updates by stopping and resuming the repainting process.

0xF0 0x00 0x21 0x45 0x7F 0x7A command reserved 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x7F System call
  • 0x7A Window control
  • command a command to execute
  • reserved an optional parameter. It is not currently used.
  • 0xF7 SysEx closing byte

The command must be one of the following:

  • 0x00 stop the window repainting process
  • 0x01 repaint the window and resume the window repainting process

# Switch to the firmware update mode

A system call that forces Electra to switch to the update mode. When in update mode Electra is ready to receive a firmware update.

0xF0 0x00 0x21 0x45 0x7F 0x7F 0xF7
  • 0xF0 SysEx header byte
  • 0x00 0x21 0x45 Electra One MIDI manufacturer Id
  • 0x7F System call
  • 0x7F Switch to the update mode
  • 0xF7 SysEx closing byte