Updated: 1/22/2014

Author: Adam Cook

Fractal Audio Sysex MIDI Specification Document

Outline:

The purpose of this document is to specify the Sysex MIDI messages that will be used to transfer data between Fractal Audio MIDI enabled product (referred to as Device) and a MIDI host or a MIDI footcontroller. The MIDI host is typically a host computer running either Fractal Audio editor software (i.e. Axe-Edit) or some sort of MIDI librarian tool (i.e. MIDI OX).  It could also be an application running on a mobile device such as iPad or iPhone.


Contents:

  1. Message Format
  2. MIDI Sysex Message Types and Error Codes
  3. Effect ID enumeration table
  4. Parameter ID enumeration table


Message Format:

MIDI Sysex messages follow a general format:


Header:

The header for a Sysex message consists of 5 total bytes. They are:

0xF0 - This byte that indicates a SysEx message type

0x00 - Zero byte  

Manufacturer ID MSB - Fractal Audio Manufacturer ID Most Significant Byte

Manufacturer ID LSB - Fractal Audio Manufacturer ID Least Significant Byte

Model ID Byte - Specific byte assigned to the Fractal Audio product

Example header for Axe-FX II:

0xF0

0x00

0x01

0x74

0x03


Message Types :

This is a byte indicating the type of message.

The following messages should be enumerated and/or #defined in MIDI.h of the Fractal Audio device firmware and host software. This table should be updated any time a new command is added in MIDI.h.


        

Command Message
MIDI Byte Value

SYSEX_WHO_AM_I

0x00

SYSEX_PARAM_DUMP

0x01

SYSEX_PARAM_SET

0x02

SYSEX_PATCH_DUMP

0x03

SYSEX_PATCH_RCV

0x04

SYSEX_PLACE_EFFECT

0x05

SYSEX_CONNECT_EFFECT

0x06

SYSEX_MODIFIER_SET

0x07

SYSEX_QUERY_VERSION

0x08

SYSEX_SET_NAME

0x09

SYSEX_CABIR_RCV

0x0A

SYSEX_CHECKSUM

0x0B

SYSEX_SET_GRID

0x0C

SYSEX_TUNER

0x0D

SYSEX_QUERY_STATES

0x0E

SYSEX_QUERY_NAME

0x0F

SYSEX_TEMPO

0x10

SYSEX_XY

0x11

SYSEX_CABNAME

0x12

SYSEX_CPULOAD

0x13

SYSEX_PATCHNUM

0x14

SYSEX_QUERY_NAME_BY_NUM

0x15

SYSEX_GET_PARAM_INFO

0x16

SYSEX_GET_MIDI_CHANNEL

0x17

SYSEX_GET_MODIFIER_INFO

0x18

SYSEX_CAB_DUMP

0x19

SYSEX_GLOBAL_BLOCK_USED

0x1A

SYSEX_GLOBAL_PATCH

0x1B

SYSEX_BANK_DUMP

0x1C

SYSEX_SAVE_PATCH

0x1D

SYSEX_SET_BYPASS

0x1E

SYSEX_GET_ALL_PARAMS

0x1F

SYSEX_GET_GRID

0x20

SYSEX_RESYNC

0x21

SYSEX_SET_DEFAULTS

0x22

SYSEX_LOOPER_STATE

0x23

SYSEX_MOVE_EFFECT

0x24

SYSEX_FW_UPDATE

0x25

SYSEX_FPGA_UPDATE

0x26

SYSEX_MICRO_UPDATE

0x27

SYSEX_GET_PARAM_STRINGS

0x28

SYSEX_SET_SCENE

0x29

SYSEX_GET_FLAGS

0x2A

SYSEX_MODIFIER_DUMP

0x2B

SYSEX_MODIFIER

0x2C

SYSEX_SET_CAB_NAME

0x2D

SYSEX_SET_PARAM_DIRECT

0x2E

SYSEX_BPM

0x2F

SYSEX_GET_GRAPH

0x30

SYSEX_TM_DATA

0x31

SYSEX_MULTIMSG_START

0x32

SYSEX_MULTIMSG_END

0x33

SYSEX_ERASE_SECTOR

0x34

SYSEX_GET_CONFIG

0x35

SYSEX_GET_GRAPHN

0x36

SYSEX_EDIT_EFFECT

0x37

SYSEX_BROADCAST_KNOB

0x38

SYSEX_BROADCAST_MODIFIER

0x39

SYSEX_GET_POSITION

0x3A

SYSEX_SET_MODPARAM_DIRECT

0x3B

SYSEX_RECALL_PATCH

0x3C

SYSEX_FAILSAFE_FW_UPDATE

0x3D

SYSEX_MUTE

0x3E

SYSEX_SET_IRCAP_NAME

0x3F

SYSEX_CONTROL_IRCAP

0x40

SYSEX_DELETE_CABIR

0x41

SYSEX_STATUS_MSG

0x64

SYSEX_RAWIR_START

0x67

SYSEX_RAWIR_DATA

0x68

SYSEX_RAWIR_END

0x69

SYSEX_FPGA_UPDATE_START

0x6A

SYSEX_FPGA_UPDATE_DATA

0x6B

SYSEX_FPGA_UPDATE_END

0x6C

SYSEX_MICRO_UPDATE_START

0x6D

SYSEX_MICRO_UPDATE_DATA

0x6E

SYSEX_MICRO_UPDATE_END

0x6F

SYSEX_EFFECT_START

0x74

SYSEX_EFFECT_DATA

0x75

SYSEX_EFFECT_END

0x76

SYSEX_PATCH_START

0x77

SYSEX_PATCH_DATA

0x78

SYSEX_PATCH_END

0x79

SYSEX_CABIR_START

0x7A

SYSEX_CABIR_DATA

0x7B

SYSEX_CABIR_END

0x7C

SYSEX_FW_UPDATE_START

0x7D

SYSEX_FW_UPDATE_DATA

0x7E

SYSEX_FW_UPDATE_END

0x7F

                                        

        


Error Codes:

        These are messages that are typically sent in within a SYSEX_STATUS_MSG response to a MIDI Sysex command indicating that an error has occurred processing the previous message.

The following messages should be enumerated and/or #defined in MIDI.h of the Fractal Audio device firmware and host software. This table should be updated any time a new command is added in MIDI.h.

Error Code
MIDI Byte Value

MIDI_ERROR_BAD_CHKSUM

0x01

MIDI_ERROR_WRONG_SYSEX_ID

0x02

MIDI_ERROR_WRONG_MODEL_NUM

0x03

MIDI_ERROR_BAD_ARGUMENT

0x04

MIDI_ERROR_MSG_NOT_RECOGNIZED

0x05

MIDI_ERROR_INVALID_FXID

0x06

MIDI_ERROR_INVALID_PARAMID

0x07

MIDI_ERROR_FX_NOT_IN_USE

0x08

MIDI_ERROR_NO_MODIFIERS_LEFT

0x09

MIDI_ERROR_WRONG_COUNT

0x0A

MIDI_ERROR_FX_NOT_ROUTABLE

0x0B

MIDI_ERROR_BAD_GRID_POS

0x0C

MIDI_ERROR_DSP_OVERLOAD

0x0D

MIDI_ERROR_FUNCTION_FAIL

0x0E

MIDI_ERROR_INVALID_PATCHNUM

0x0F

MIDI_ERROR_ILLEGAL_MSG

0x10

MIDI_ERROR_BAD_MSG_LENGTH

0x11

MIDI_ERROR_IMAGE_SIZE_INCORRECT

0x12

MIDI_ERROR_AD_IMAGE_CHKSUM

0x13

MIDI_ERROR_NOT_RDY_FOR_FW_UPD

0x14

MIDI_ERROR_BUFFER_OVERRUN

0x15

MIDI_ERROR_INVALID_CABNUM

0x16

MIDI_ERROR_FIRMWARE_ALREADY_CURRENT

0x17

MIDI_ERROR_CMD_NOT_SUPPORTED

0x18

MIDI_ERROR_NULL_DATA

0x19


Data Bytes:

This is the message payload. It will vary depending upon the value of the message type. Message payload contents are described in further detail in the message type descriptions.


Checksum:

The checksum is calculated over all the preceding bytes in the message and the MS bit then removed. For example:

checksum = 0

for(i = 0; i < N; i++)

{

        checksum ^= data[i];

}

checksum &= 0x7f;


MIDI Sysex Message Types


Message:

SYSEX_WHO_AM_I

0x00

(Added in FW 13.03)

Function:

This message is sent by the host to the device in order to query the device’s model number.  When sending this message, the device ID in Header must be set to 0x7F, which is used as the broadcast model ID.

If successful, the device will respond with a SYSEX_STATUS_MSG with the device correctly set in the header and a status of zero.

Error Codes:

None

Message Format:

From host to device:

Header - As specified above except the Model ID Byte must be 0x7F

Message Type - 0x00

Checksum

0xF7

From Device to Host:

        See SYSEX_STATUS_MSG.


Message:

SYSEX_PARAM_DUMP

0x01

(Added in FW 11.00)

Function:

Message sent by the host to the device to request a dump of all parameters associated with a specified effect ID. Device will respond to the host with a SYSEX_MULTIMSG_START containing the number of parameters to follow. Then it will respond with one SYSEX_PARAM_DUMP message per parameter. Finally, a SYSEX_MULTIMSG_END signifying the end of the transmission.

Error Codes:

None

Message Format:

From host to device:

Header - As specified Above

Message Type - 0x2B

Effect ID - 14-bits sent as 2 MIDI bytes (LSB first)

Checksum

0xF7

From Device to Host:

        See SYSEX_MULTIMSG_START and SYSEX_MULTIMSG_END .

Each subsequent SYSEX_PARAM_DUMP message has the following form (similar to a SYSEX_PARAM_SET):

Header - As specified above

Message Type - 0x01

Effect ID - 14 bits over 2 MIDI bytes (LSB) first

Parameter ID - 14 bits over 2 MIDI bytes (LSB) first

Parameter Value - 16 bit Int over 3 MIDI bytes (LSB) first

Knob Value - 1 MIDI byte, value 0-127

Parameter Limits (Integer types only, Log and Lin types return 0’s)-

        Low Limit - 2 MIDI bytes (LSB) first

        High Limit - 2 MIDI bytes (LSB) first

Null-Terminated Value String. Length equal to # of char’s in value string. 1 byte per char.

checksum

0xF7 (end)


Message:

SYSEX_PARAM_SET

0x02

Function:

        Sent by host to device to set or query a parameter value within an effects block.  If successful, device will respond with SYSEX_PARAM_SET message containing updated values. If not successful, device will respond with SYSEX_STATUS_MSG containing error code.

Potential Error Codes:

MIDI_ERROR_INVALID_FXID - Invalid effect ID specified

MIDI_ERROR_INVALID_PARAMID - Invalid parameter ID specified

Format:

From Host to Device:

Header - As specified above

Message Type - 0x02

Effect ID - 14 bits over 2 MIDI bytes

Parameter ID - 14 bits over 2 MIDI bytes

Parameter Value - 16 bits over 3 MIDI bytes

Operation Byte -

        0: Query - Query the current value

        1: Set - Set the parameter value to the value specified

        2: Default - Set the parameter value to its default

        3: Increment - Increment by the minimum step size

        4: Decrement - Decrement by the minimum step size

        5: Coarse Increment - Increment by large step size determined by parameter

        6: Coarse Decrement - Decrement by large step size determined by parameter

checksum

0xF7 (end)

From Device to Host:

Header - As specified above

Message Type - 0x02

Effect ID - 14 bits over 2 MIDI bytes (LSB) first

Parameter ID - 14 bits over 2 MIDI bytes (LSB) first

Parameter Value - 16 bit Int over 3 MIDI bytes (LSB) first

Knob Value - 1 MIDI byte, value 0-127

Parameter Limits (Integer types only, Log and Lin types return 0’s)-

        Low Limit - 2 MIDI bytes (LSB) first

        High Limit - 2 MIDI bytes (LSB) first

Null-Terminated Value String. Length equal to # of char’s in value string. 1 byte per char.

checksum

0xF7 (end)

        

Example Messages

Axe-FX II, Effect ID Amp 1 Block. Param ID Drive, Query Param

F0 00 01 74 03 02 6A 00 01 00 00 00 00 00 5D F7

Response from Axe-FX II (Amp 1 Drive is set to 5.00):

F0 00 01 74 03 02 6A 00 01 00 7F 7F 01 3F 00 00 00 00 35 2E 30 30 00 4A F7

Axe-FX II, Effect ID Amp 1 Block. Param ID Drive, Set Param to 10.0

F0 00 01 74 03 02 6A 00 01 00 7F 7F 03 01 6D F7

Response from Axe-FX II (Amp 1 Drive is set to 10.00):

F0 00 01 74 03 02 6A 00 01 00 7E 7F 03 7F 00 00 00 00 31 30 2E 30 30 00 3D F7

        

        


Message:

SYSEX_PATCH_DUMP

0x03

Function:

        Message sent by Host to Device which requests a dump of the specified patch. The specified patch may be a patch in memory or it may be the current patch contained in the edit buffer. If successful, the device will respond with SYSEX_PATCH_START, SYSEX_PATCH_DATA, and SYSEX_PATCH_END sequence of messages which contains all of the details of the specified patch. If unsuccessful, the device will respond with SYSEX_STATUS_MSG containing an error code.  

Potential Error Codes:

MIDI_ERROR_INVALID_PATCHNUM - Invalid Patch number specified

Format:

From host to device:

Header

Message Type - 0x03

Bank Number -

1 byte: 0x0, 0x1, 0x2, 0x7F for Edit Buffer, 0x7E for Edit buffer w/o globals

Patch Number - 1 byte: 0x0 - 0x7F, if Bank Number is 0x7F this is a “don’t care” byte

Checksum (7-bit)

0xF7 (end)

From device to host: See entries for SYSEX_PATCH_START, SYSEX_PATCH_DATA, and SYSEX_PATCH_END.

Example Message:

Device Axe-FX II, Bank 1, Patch 20

F0 00 01 74 03 03 01 14 10 F7


Message:

SYSEX_PATCH_RCV

0x04

This message is not currently used. Reserved for future use.


Message:

SYSEX_PLACE_EFFECT

0x05

Function:

Message sent by host to place a specified effect in a specified grid location. If there is a different effect already present at the location specified, it will be removed. Setting Effect ID to zero will remove any effect at the current position.  Device will respond with SYSEX_STATUS_MSG indicating either success (0) or an error code.

Potential Error Codes:

MIDI_ERROR_BAD_GRID_POS - Invalid grid position specified

MIDI_ERROR_INVALID_FXID - Invalid Effect ID specified

MIDI_ERROR_FX_NOT_ROUTABLE - Specified effect is not a routable effect

MIDI_ERROR_DSP_OVERLOAD - Not enough CPU available to place the specified effect

Format:

From host to device:

Header - As specified above

Message Type - 0x05

Effect ID - 14 bits over two MIDI bytes

Position: Index into location in device’s grid or effects chain to place effect. 1 byte.

Checksum.

0xF7 (end)

Valid grid index locations:

AXE-FX II: 0 through 47

Grid index increments down by row and then across by column.

Example:

Column 1, Row 1 = Index 0

Column 1, Row 2 = Index 1

Column 2, Row 1 = Index 4

Column 3, Row 1 = Index 8

Column 12, Row 4 = Index 47

etc.

        

Example Message:

From host to Axe-FX II, place Rotary 2 effect into Column 1 Row 2 on Grid

F0 00 01 74 03 05 79 00 01 7B F7

Response from Axe-FX II to host:

F0 00 01 74 03 64 05 00 67 F7


Message:

SYSEX_CONNECT_EFFECT

0x06

Function:

Message sent by host to connect (0) or disconnect (1) a source block and a destination block. Device will respond with SYSEX_STATUS_MSG indicating either success (0) or an error code.

Potential Error Codes:

MIDI_ERROR_BAD_GRID_POS - Either one or both of the specified block positions is invalid.

MIDI_ERROR_FUNCTION_FAIL - Connection process failed for unknown reason.

Format:

From host to device:

Header - As specified above

Message Type - 0x06

Source Position - 1 MIDI byte

Dest Position - 1 MIDI byte

Connect(1) or Disconnect(0)

Checksum

0xF7 (end)

Valid grid index locations:

AXE-FX II: 0 through 47

Grid index increments down by row and then across by column.

Example:

Column 1, Row 1 = Index 0

Column 1, Row 2 = Index 1

Column 2, Row 1 = Index 4

Column 3, Row 1 = Index 8

Column 12, Row 4 = Index 47

etc.

Example Message:

From host to Axe-FX II: Connect effect in Column 1 Row 1 with effect in Column 1 Row 2

F0 00 01 74 03 06 01 05 01 05 F7

Response from Axe-FX II to host:

F0 00 01 74 03 64 06 00 64 F7


Message:

 SYSEX_MODIFIER_SET

0x07

Function:

Message sent by host to query or set a modifier parameter to a specific modifier value. I.e. Set modifier start parameter to a value of 10%. If successful, device will respond to host with  SYSEX_MODIFIER_SET type message containing updated values. If unsuccessful, device will respond to host with SYSEX_STATUS_MSG containing error code.

Potential Error Codes:

MIDI_ERROR_INVALID_FXID - Invalid effect ID specified

MIDI_ERROR_INVALID_PARAMID - Invalid parameter ID specified

MIDI_ERROR_FX_NOT_IN_USE - The effect ID specified is not in use currently.

MIDI_ERROR_NO_MODIFIERS_LEFT - No modifiers left to use for connection.

Message Format:

From Host to Device:

Assuming a modifier is already connected, the following message can be then be sent:

Header - As specified above

Message Type - 0x07

Effect ID - 14 bits over two MIDI bytes (LSB first)

Effect param ID - 14 bits over two MIDI bytes (LSB first)

Modifier parameter - 14 bits over two MIDI bytes (LSB first)

Modifier value - 16 bits over three MIDI bytes (LSB first)

Operation Byte -

        0: Query - Query the current value

        1: Set - Set the modifier-parameter value to the value specified

        2: Default - Set the modifier-parameter value to its default

        3: Increment - Increment by the minimum step size

        4: Decrement - Decrement by the minimum step size

        5: Coarse Increment - Increment by large step size determined by parameter

        6: Coarse Decrement - Decrement by large step size determined by parameter

Checksum

0xF7 (end)

Note: The modifier must first be connected to an effect parameter before this message will work properly. If a modifier is not connected, this message can be sent with Modifier Parameter value of MOD_CTRLID (0x0) and any value > 0x0 for the Modifier Value.

To connect a modifier automatically:

Header - As specified above

Message Type - 0x07

Effect ID - 14 bits over two MIDI bytes (LSB first)

Effect param ID - 14 bits over two MIDI bytes (LSB first)

Modifier parameter - 0x0 0x0 (MOD_CTRLID)

Modifier value - 0x1 0x00 0x00 (or greater)

Set - 0x1

Checksum

0xF7 (end)

To disconnect a modifier:

Note: The modifier must first be connected to an effect parameter before this message will work properly. If a modifier is not connected, this message can be sent with Modifier Parameter value of MOD_CTRLID (0x0) and any value > 0x0 for the Modifier Value.

To disconnect a modifier automatically:

Header - As specified above

Message Type - 0x07

Effect ID - 14 bits over two MIDI bytes (LSB first)

Effect param ID - 14 bits over two MIDI bytes (LSB first)

Modifier parameter - 0x0 0x0 (MOD_CTRLID)

Modifier value - 0x0 0x0 0x0

Set - 0x1

Checksum

0xF7 (end)

Response message from device to host:

Header - As specified above

Message Type - 0x07

Effect ID - 14 bits over two MIDI bytes (LSB first)

Effect param ID - 14 bits over two MIDI bytes (LSB first)

Modifier parameter - 14 bits over two MIDI bytes (LSB first)

Modifier value - 16 bits over three MIDI bytes (LSB first)

Null terminated Value String

Checksum

0xF7 (end)

Example Message:

From host to Axe-FX II, Connect modifier automatically to Delay 1, Effect Param Ratio

F0 00 01 74 03 07 70 00 03 00 00 00 01 00 00 01 72 F7

Response from Axe-FX II:

F0 00 01 74 03 07 70 00 03 00 00 00 01 00 00 4C 46 4F 20 31 41 00 66 F7 F0 00 01 74 03 21 27 F7

From host to Axe-FX II, Set modifier connected to Delay 1, Effect Param Ratio, Modifier Param Max, 50.5%

F0 00 01 74 03 07 70 00 03 00 02 00 7F 7F 01 01 70 F7

Response from Axe-FX II:

F0 00 01 74 03 07 70 00 03 00 02 00 7F 7F 01 35 30 2E 35 20 25 00 6A F7

From host to Axe-FX II, Disconnect modifier automatically from Delay 1, Effect Param Ratio

F0 00 01 74 03 07 70 00 03 00 00 00 00 00 00 01 73 F7

Response from Axe-FX II:

F0 00 01 74 03 07 70 00 03 00 00 00 00 00 00 4E 4F 4E 45 00 78 F7


Message:

SYSEX_QUERY_VERSION

0x08

Function:

Used by host to query the firmware version of the device. Device will respond with SYSEX_QUERY_VERSION message containing the current firmware version as #defined in the project.

Error Codes:

None

Format:

From host to device:

Header - As specified above

Message Type - 0x08

        Checksum

        0xF7

From device to host:

Header - As specified above

Message Type - 0x08

DSP Version Major 1 byte (i.e. integer value before decimal)

DSP Revision Minor 1 byte (i.e. hundreds value after decimal)

FPGA Revision - 1 Byte

Microcontroller Revision - 1 Byte

Product Version - 1 Byte

Hardware Revision - 1 Byte

Checksum

0xF7 (end)

Example Message:

From host to Axe-FX II:

F0 00 01 74 03 08 0E F7

From Axe-FX II to host, DSP firmware version 10.00, FPGA Rev 2, Micro Rev 0, Product Rev 1, Hardware Rev 0 :

F0 00 01 74 03 08 0A 00 02 00 01 00 07 F7


Message:

SYSEX_SET_NAME

0x09

Function:

Used by host to set name of the preset in the current edit buffer of the device. Device will respond with SYSEX_STATUS_MSG indicating either success (0) or an error code.

Error Codes:

MIDI_ERROR_BAD_MSG_LENGTH - Wrong number of characters in message.

Format:

From host to device:

Header - As specified above

Message Type - 0x09

Name: 32 MIDI bytes, 1 byte per char. (ASCII format, values must be less than 128).

Last char is null 0x0.

Checksum

0xF7

Example Message:

From host to Axe-FX II, Set patch name to “Plexi”

F0 00 01 74 03 09 50 6C 65 78 69 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 47 F7

Response from Axe-FX II:

F0 00 01 74 03 64 09 00 6B F7


Message:

SYSEX_CABIR_RCV

0x0A

Not currently used. Reserved for future use.


Message:

SYSEX_CHECKSUM

0x0B

Not currently used. Reserved for future use.


Message:

SYSEX_SET_GRID

0x0C

Function:

Used by the host to send preset grid info to the device.  The grid info consists of the placement of the effects on the grid (i.e. which effect is placed in which slot). If the device is an Axe-FX type, it also contains connection info for the grid (i.e. effect A in slot Y is connected to effect B in slot X).

Device will respond with SYSEX_STATUS_MSG indicating either success (0) or an error code.

Error Codes:

MIDI_ERROR_BAD_MSG_LENGTH - Wrong size message received. Either corrupted message or incorrect data payload length.

Format:

From host to device:

Header - As specified above

Message Type - 0x0C

Data Payload -

Checksum

0xF7 (end)

The grid count starts in the top left corner. Then it proceeds down by row and then across by column. I.e. the top effect ID in the top row of the 2nd column would be the 5th grid entry.

Note: “If connected” byte contains 1 bit per row in the column immediately preceding the specified effect. Bit 0 = Row 1, Bit 1 = Row 2, Bit 2 = Row 3, Bit 3 = Row 4

Example: If effect ID is in Column 2, Row 2 and the effects in preceding Column 1 Row 1 and Column 1 Row 2 are connected to it then bits 0 and 1 would be set in the connected byte for a value of 0x03.

Example Message:

(This is a SYSEX_GET_GRID message. The same message could be used for SYSEX_SET_GRID with the message type changed to 0C and checksum recalculated)

F0 00 01 74 03 20 00 00 00 00 48 01 02 00 00 00 00 00 00 00 00 00 00 00 00 00 49 01 02 00 00 00 00 00 00 00 00 00 00 00 00 00 4A 01 02 00 00 00 00 00 00 00 00 00 00 00 00 00 05 01 02 00 00 00 00 00 00 00 00 00 00 00 00 00 6A 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 6C 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 4B 01 02 00 00 00 00 00 00 00 00 00 00 00 00 00 4C 01 02 00 00 00 00 00 00 00 00 00 00 00 00 00 4D 01 02 00 00 00 00 00 00 00 00 00 00 00 00 00 4E 01 02 00 00 00 00 00 00 00 00 00 00 00 00 00 4F 01 02 00 00 00 00 00 00 00 00 00 00 00 00 00 50 01 02 00 00 00 00 00 00 00 00 00 75 F7


Message:

SYSEX_TUNER

0x0D

Function:

Sends tuner data from the device. Data could be sent to a host application running on PC or a MIDI foot controller. No return message is expected since it is a non-critical status message.

Note: Tempo and Tuner messages do not have a checksum in order to minimize the size of the message.

Error Codes:

None

Message Format:

From device to host:

Header - As specified above

Message Type - 0x0D

Note number (1 byte, 0 - 11) (0 = A, 1 = Bb, 2 = B, etc.).

String (1 byte, 0 - 5, 0 = low E)

Cents, offset binary (1 byte, 63 = 0, 62 = -1, 64 = +1, etc.)

0xF7 (end)

Example Message:

Axe-FX II Tuner, E6, +3 cents

F0 00 01 74 03 0D 06 00 42 F7


Message:

SYSEX_QUERY_STATES

0x0E

Function:

Used by the host to request the bypass states of all the effects in the currently active preset on the device. The device will respond with a SYSEX_QUERY_STATES message type containing the bypass state information and then a SYSEX_SET_SCENE message

Error Codes:

None

Message Format:

Message from Host to Device:

Header - As specified above

Message Type - 0x0E

Checksum

0xF7

Response from Device to Host (note that there is NO checksum):

Header - As specified above

Message Type - 0x0E

The Effect ID, XY CC#, Bypass CC#, XY state and bypass state are encoded into one 32-bit word which is then sent as five 7-bit MIDI bytes.

n = effect_ID << 24 | xy_cc_num << 16 | fx_cc_num << 8 | state_flags;

(continue for all effects present in patch, including gate, output, control)...

0xF7

Header - As specified Above

Message Type - 0x28 (SYSEX_SET_SCENE)

Scene - 1 Data Byte specifying currently selected scene.

Checksum

0xF7

Message Example:

From host to device, Axe-FX II:

F0 00 01 74 03 0E 08 F7

Response from Axe-FX II (3 effects present in grid, current Scene is Scene 1):

F0 00 01 74 03 0E 03 4A 10 53 06 03 4E 18 63 06 02 62 30 2B 78 F7

F0 00 01 74 03 29 00 2F F7

:


Message:

SYSEX_QUERY_NAME

0x0F

Function:

Used by host to query the name of the currently selected preset in the device. The device will respond with a SYSEX_QUERY_NAME message type containing the name.

Error Codes:

None

Format:

From host to device:

Header - As specified above

Message Type - 0x0F

Checksum

0xF7

From device to host:

Header - As specified above

Message Type - 0x0F

Name: 32 chars (1 ASCII byte per Char). Last char is “null” 0x0

Checksum

0xF7

Example Message:

From host to device: Axe-FX II

F0 00 01 74 03 0F 09 F7

From device to host (sending patch name “Cliffs of Dover”):

F0 00 01 74 03 0F 43 6C 69 66 66 73 20 6F 66 20 44 6F 76 65 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 00 00 5F F7


Message:

SYSEX_TEMPO

0x10

Function:

Used by device to send outgoing message in sync with the tempo light on the device. There is no return message expected since it is just a non-critical status message.

Note: Tempo and Tuner messages do not have a checksum in order to minimize the size of the message.

Error Codes:

 None

Message Format:

Header - As specified above

Message Type - 0x10

0xF7

Example Message:

Axe-FX II sending tempo message

F0 00 01 74 03 10 F7


Message:

SYSEX_XY

0x11

Function:

Message sent by host to select a desired parameter set (either set X or set Y) on the device for a specified effect. If successful, device will respond to host with SYSEX_XY type message informing the host whether set X or set Y is selected for the specified effect.

Error Codes:

MIDI_ERROR_INVALID_FXID - The specified effect ID is not valid.

Message Format:

From host to device:

Header - As specified above

Message Type - 0x11

Effect ID - 14 bits over two MIDI bytes

Parameter set value (0x0 for X, 0x1 for Y)

Query (0x0) or set (0x1) value

Checksum

0xF7 (end)

From device to host:

Header - As specified above

Message Type - 0x11

Effect ID - 14 bits over two MIDI bytes

Parameter set value (0x0 for X, 0x1 for Y)

Checksum

0xF7 (end)

Example Messages:

From host to device: Axe-FX II, Set Reverb 1 to Y param set.

F0 00 01 74 03 11 6E 00 01 01 79 F7

From device to host:

F0 00 01 74 03 11 6E 00 01 78 F7


Message:

SYSEX_CABNAME

0x12

Function:

Message sent from host to device to request the cabinet name for a specified cabinet slot.

If the cabinet number is 0x3FFF, the device will respond to the host with a SYSEX_CABNAME_START containing the number of cab names to follow (1 SYSEX_CABNAME per cab) followed by the sequence of SYSEX_CABNAME type messages containing the cabinet name.

If the cabinet number is between 0 - 124 (inclusive), the device will respond with a SYSEX_CABNAME message with the given cabinet’s name.

Error Codes:

None

Message Format:

“Cabinet Number” slot index guide:

Factory 1-74 = Cabinet numbers 0-73

User Cab 1-40 = Cabinet numbers 74-124

From host to device:

Header - As specified above

Message Type - 0x12

Cabinet Number - 2 MIDI bytes (LSB first). If 0x7F is sent for both bytes then the device will return ALL cabinet names (1 SYSEX_CABNAME per cabinet).

Checksum

0xF7

From device to host:

Header - As specified above

Message Type - 0x12

Cabinet Number - 2 MIDI bytes (LSB first).

Cabinet name sent as 32 Chars (1 MIDI byte per char)

Checksum

0xF7

Example Messages:

From host to device: Axe-FX II, get name of Factory Cabinet 1:

F0 00 01 74 03 12 00 00 14 F7

From device to host (Factory Cab name is “1x6 Oval”):

F0 00 01 74 03 12 00 00 31 78 36 20 4F 56 41 4C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 5F F7

From host to device: Axe-FX II, get name of User Cab 3:

F0 00 01 74 03 12 4C 00 58 F7

From device to host (User cab 3 name is “Nice cab”):

F0 00 01 74 03 12 4C 00 4E 69 63 65 20 43 61 62 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 19 F7


Message:

SYSEX_CPU_LOAD

0x13

Function:

Message sent from host to device to query the current CPU load. Device responds to host with SYSEX_CPU_LOAD message type containing the CPU load.

Error Codes:

None

Message Format:

Header - As specified above

Message Type - 0x13

        CPU Load - (1 MIDI byte) representing CPU load from 0-100%.

        Checksum

        0xF7

Example Message:

From host to device, Axe-FX II:

F0 00 01 74 03 13 15 F7

From device to host, CPU load of 54%.

F0 00 01 74 03 13 36 23 F7


Message:

SYSEX_PATCHNUM

0x14

Function:

Message sent from host to device to request the currently selected patch/preset number. Device will respond with SYSEX_PATCHNUM type message containing this information.

Message is also sent from the device to the host when a patch is selected using the NAV or VALUE wheel in the Recall screen.

Error Codes:

None

Message Format:

From host to device:

Header - As specified above

Message Type - 0x14

        Checksum

        0xF7

From device to host:

Header - As specified above

Message Type - 0x14

        Bank number (1 MIDI byte)

        Preset number (1 MIDI byte)

        0xF7

Example Messages:

From host to Axe-FX II:

F0 00 01 74 14 F7

From device to host (Preset 57):

F0 00 01 74 03 14 00 39 2B F7


Message:

SYSEX_QUERY_NAME_BY_NUM

0x15

Message sent by host to device to request the the patch name for a given bank and preset number, or to receive all patch names in one dump.

If a single Patch Name Query is requested only one response will be sent by the device.  If a Dump is requested, 384 complete responses will be sent by the device (each response will be a full SYSEX_QUERY_NAME_BY_NUM with the bank, patch num, and name set).

Message Format:

From host to device:

Header - As specified Above

Message Type - 0x15

Bank Number - 1 Midi byte.  

        0, 1, 2: request a patch from Bank A, B, or C

        0x7F: (used with a Patch Num of 0x7F) get all patch names

Patch Number - 1 Midi byte

        0 - 127: request the patch offset from the given bank

        0x7F: (used with a Bank Num of 0x7F) get all patch names

Checksum

0xF7

From device to host:

Header - As specified above

Message Type - 0x15

Bank Num: 1 Midi byte

Patch Num: 1 Midi Byte

Name: 32 chars (1 ASCII byte per Char). Last char is “null” 0x0

Checksum

0xF7


Message:

SYSEX_GET_PARAM_INFO

0x16

Function:

Message sent from host to device to query the parameter info for a specified effect and a specified parameter. Parameter info consists of the type, low-limit, high-limit, multiplier and resolution members of the parameter. The type is a 32-bit int, and the other low-limit, high-limit, multiplier, and resolution members are 32-bit floats. Each member is sent as 5 MIDI bytes of 7 bits each (LSB first).

If successful, device responds with parameter info. If unsuccessful, device will respond to host with SYSEX_STATUS_MSG containing error code.

Error Codes:

MIDI_ERROR_INVALID_FXID - Invalid FX ID specified.

MIDI_ERROR_INVALID_PARAMID - Invalid parameter ID specified

Message Format:

From host to device:

Header - As specified Above

Message Type - 0x16

Effect ID - 14 bits over 2 MIDI bytes

Parameter ID - 14 bits over 2 MIDI bytes

Checksum

0xF7

From device to host:

Header - As specified Above

Message Type - 0x16

Param Type - 32-bit int sent as 5 MIDI bytes of 7 bits each (LSB first)

Param Low-Limit - 32-bit float sent as 5 MIDI bytes of 7 bits each (LSB first)

Param High-Limit - 32-bit float sent as 5 MIDI bytes of 7 bits each (LSB first)

Param Multiplier - 32-bit float sent as 5 MIDI bytes of 7 bits each (LSB first)

Param Resolution - 32-bit float sent as 5 MIDI bytes of 7 bits each (LSB first)

Checksum

0xF7

        

Example Message:

From host to device: Axe-FX II, Chorus 1, Rate parameter

F0 00 01 74 03 16 74 00 02 00 66 F7

From device to host, Chorus 1 Rate parameter is set to 1.0Hz. :

F0 00 01 74 03 16 33 04 00 00 00 4D 19 33 6E 03 00 00 00 09 04 00 00 00 7C 03 00 00 00 00 00 5F F7  


Message:

SYSEX_GET_MIDI_CHANNEL

0x17

Function:

Message sent by host to device to query the current MIDI channel configured on the device. Device responds with current MIDI channel as configured in CONFIG structure.

Error Codes:

None

Message Structure:

From host to device:
        
Header - As specified Above

Message Type - 0x17

        Checksum

        0xF7

From device to host:

Header - As specified Above

Message Type - 0x17

        Config MIDI channel (1 MIDI byte) - Values 0-15 for MIDI Channels 1-16.

        Checksum

        0xF7

Example Messages:

Axe-FX II, host to device:
F0 00 01 74 03 17 11 F7

Axe-FX II, device to host (MIDI Channel 1)::
F0 00 01 74 03 17 00 11 F7  


Message:

SYSEX_GET_MODIFIER_INFO

0x18

Function:

Message sent by host to device to query the connected effectId-paramId of the given modifier-Id. The device will respond with a SYSEX_GET_MODIFIER_INFO message containing these values.

Error Codes:

MIDI_ERROR_INVALID_MODIFIER_ID - Invalid modifier ID specified

Message Structure:

From host to device:
        
Header - As specified Above

Message Type - 0x18

Modifier ID - 2 MIDI bytes (LSB first).

Note: Modifier index starts at 100. (Modifier 1 = 0x64).

        Checksum

        0xF7

From device to host:

Header - As specified Above

Message Type - 0x18

                Modifier ID - 2 MIDI bytes (LSB first).

                Controller ID - 2 MIDI bytes (LSB first).

Effect ID - 2 MIDI bytes (LSB first) - zero if no effect is connected.

Effect Parameter ID - 2 MIDI bytes (LSB first).

        Checksum

        0xF7


Message:

SYSEX_CAB_DUMP

0x19

Function:

Message sent by host to request a dump of a specified user cab from device. If successful, device will respond with sequence of SYSEX_CABIR_START, SYSEX_CABIR_DATA, and SYSEX_CABIR_END messages containing cabinet data where the cabinet number has been stripped from the header and replaced with 0x7F. If unsuccessful, device will respond to host with SYSEX_STATUS_MSG containing error code.

Error Codes:

MIDI_ERROR_INVALID_CABNUM - Invalid cab number specified. Cab number must be greater than 0 and less than the number of user cabs on the device.

Message Format:

From host to device:

        Header - As specified Above

Message Type - 0x19

Cabinet Number  - 1 MIDI byte. Index starts at 0. (User Cab 1 = 0x0).

Checksum

0xF7 (end)

From device to host:

        See entries for SYSEX_CABIR_START, SYSEX_CABIR_DATA, and SYSEX_CABIR_End.

Example Message:

Axe-FX II, Dump User Cab 11

F0 00 01 74 03 19 0A 15 F7

Response from Axe-FX II:

See entries for SYSEX_CABIR_START, SYSEX_CABIR_DATA, and SYSEX_CABIR_END.


Message:

SYSEX_GLOBAL_BLOCK_USED

0x1A

Function:

Message sent from host to device to query whether or not a global block is in use for a specified effect ID in a specified global preset. There are 10 global presets each containing every effect block.  So for example to query if Delay 1 Global Block 5 is in use one would specify global preset 5.

If Global Preset is set to 0x7F, a successful response from the device will be 10 SYSEX_GLOBAL_BLOCK_USED messages, one for each index in the global memory for that Effect ID.

If Global Preset is not 0x7F, a successful response from the device will be only one SYSEX_GLOBAL_BLOCK_USED message for the given Global Preset index.

For any unsuccessful query, device will respond with SYSEX_STATUS_MSG containing error code.

Error Codes:

MIDI_ERROR_INVALID_FXID - Invalid Effect ID specified.

MIDI_ERROR_INVALID_PATCHNUM - Invalid patch number specified.

Message Format:

From host to device:

Header - As specified Above

Message Type - 0x1A

Effect ID - 14-bits sent as 2 MIDI bytes (LSB first)

Global Preset - 2 MIDI bytes (0x7F search all global presets).

Checksum

0xF7

From device to host:

Header - As specified Above

Message Type - 0x1A

Used (1) or Not used (0) byte

Checksum

0xF7

Example Message:

From host to device, Axe-FX II, Effect ID Comp 1, Global Preset 5:

F0 00 01 74 03 1A 64 00 05 7D F7

        


Message:

SYSEX_GLOBAL_PATCH

0x1B

Function:

Message sent by host to device to perform global preset operations. The device will return a SYSEX_STATUS_MSG containing either an error code or (0) if operation is successful.

Error Code:

MIDI_ERROR_INVALID_FXID - Invalid Effect ID specified.

MIDI_ERROR_INVALID_PATCHNUM - Invalid patch number specified

Message Format:

Header - As specified Above

Message Type - 0x1B

Effect ID - 14-bits sent as 2 MIDI bytes (LSB first)

Global Preset - 1 MIDI byte

Function - 1 MIDI byte with the following options:

        0: Save effect to global preset and link with that preset

                1: Load effect from global preset and link

                2. Load from global preset and don’t link

                3. Unlink effect

        Checksum

        0xF7

Example Message:

From host to Axe-FX II, Effect ID Chorus, Global preset 2, Load effect from global preset and link

F0 00 01 74 03 1B 74 00 02 01 6A F7

Response from Axe-FX II to host: Operation successful

F0 00 01 74 03 64 1B 00 79 F7

        


Message:

SYSEX_BANK_DUMP

0x1C

Function:

Message sent from host to device to request a dump of an entire bank (128 presets). If successful, device will respond with a sequence of SYSEX_PATCH_START, SYSEX_PATCH_DATA, and SYSEX_PATCH_END messages for each of the 128 presets in the bank. If unsuccessful, device will respond with SYSEX_STATUS message type containing error code.

Error Codes:

MIDI_ERROR_INVALID_BANKNUM - Invalid bank number specified.

Message Format:

From host to device:

Header - As specified Above

Message Type - 0x1C

Bank Number - 1 MIDI byte. Valid numbers are 0x0 for Bank A, 0x1 for Bank B, 0x2 for Bank C and 0x3 for the System Bank.

Checksum

0xF7

From device to host:

See entries for SYSEX_PATCH_START, SYSEX_PATCH_DATA, and SYSEX_PATCH_END

Example Message:

From host to Axe-FX II, Request dump of bank 2 (bank C)

F0 00 01 74 03 1C 02 18 F7

Response from Axe-FX II:

See entries for SYSEX_PATCH_START, SYSEX_PATCH_DATA, and SYSEX_PATCH_END


Message:

SYSEX_SAVE_PATCH

0x1D

Function:

Message sent by host to device to tell device to save the contents of the edit buffer to the specified preset.  Device will respond with SYSEX_STATUS_MSG with error code or (0) for success.

Error Codes:

MIDI_ERROR_INVALID_BANKNUM - Invalid bank number specified

MIDI_ERROR_INVALID_PATCHNUM - Invaild preset number specified

Message Format:

From host to device:

Header - As specified Above

Message Type - 0x1D

Bank number - 1 MIDI byte

Preset number - 1 MIDI byte

Checksum

0xF7

Possible bank numbers are 0-2

Possible preset numbers are 0-127

Example Message:

From host to Axe-FX II, Save current edit buffer to Preset 10:

F0 00 01 74 03 1D 00 0A 11 F7

Response from Axe-FX II:

F0 00 01 74 03 64 1D 00 7F F7

 


Message:

SYSEX_SET_BYPASS

0x1E

Function:

Command sent by host to device to configure the bypass state of the device. Device will return a SYSEX_STATUS_MSG containing error code or (0) for success.

Error Code:

MIDI_ERROR_BAD_ARGUMENT - Invalid bypass argument specified

Message Format:

Header - As specified Above

Message Type - 0x1E

Bypass Argument - 1 MIDI byte        

        0 - Device is not bypassed or muted

        1 - Device is set to bypass but globalMute is turned off

        2 - Device is not bypassed but globalMute is turned on

        Checksum

        0xF7

Example Message:

Axe-FX II, turn on Bypass

F0 00 01 74 03 1E 01 19 F7

Response from Axe-FX II:

F0 00 01 74 03 64 1E 00 7C F7


Message:

SYSEX_GET_ALL_PARAMS

0x1F

Function:

Message sent by the host to the device to request ALL of the parameters for a specified effect ID in the current preset. If successful, the device will respond with a sequence of SYSEX_EFFECT_START, SYSEX_EFFECT_DATA, and SYSEX_EFFECT_END type messages containing all of the parameter information for the specified effect. If unsuccessful, the device will respond with a SYSEX_STATUS type message containing an error code.

Error Codes:

MIDI_ERROR_INVALID_FXID - Invalid Effect ID specified.

Message Format:

From host to device:

Header - As specified Above

Message Type - 0x1F

        Effect ID - 14-bits sent as 2 MIDI bytes (LSB first)

        Checksum

        0xF7

From device to host:

        See entries for SYSEX_EFFECT_START, SYSEX_EFFECT_DATA, and SYSEX_EFFECT_END

Example Message:

From host to Axe-FX II, Effect ID Drive 1:

F0 00 01 74 03 1F 05 01 1D F7

Response from Axe-FX II:

F0 00 01 74 03 74 05 01 28 00 01 5F F7 F0 00 01 74 03 75 28 00 02 00 00 71 3B 01 53 46 02 71 25 01 7E 7F 03 00 00 00 00 00 00 00 00 00 0F 1A 03 7E 7F 03 00 00 00 32 06 02 7F 7F 01 7F 7F 01 1E 01 02 7F 7F 01 00 00 00 00 00 00 7F 7F 01 7E 7F 03 00 00 00 71 7F 01 7F 7F 01 7F 7F 01 7E 7F 03 00 00 00 24 74 01 00 00 00 12 7A 00 00 60 03 06 00 00 65 0C 02 7F 7F 01 7F 7F 01 1E 01 02 7F 7F 01 00 00 00 00 00 00 7F 7F 01 7E 7F 03 4A F7 F0 00 01 74 03 76 70 F7


Message:

SYSEX_GET_GRID

0x20

Function:

Message sent by the host to the device to request the grid info for the present currently loaded in the edit buffer. Device will respond with a SYSEX_GET_GRID type message containing a data payload with all the current grid information. This consists of an effect ID and a connection bit for each grid location. The connection bit for a grid location is set if the prior columns row is connected.

Error Codes:

None

Message Format:

From host to device:

Header - As specified Above

Message Type - 0x20

        Checksum

        0xF7

From device to host:

Header - As specified Above

Message Type - 0x20

Data payload - For Axe-FX II: 48 grid locations * 2 variables per (ID and “if connected”) *

2 MIDI bytes per variable (LSB first) = 192 MIDI bytes

        Checksum

        0xF7

Note: “If connected” byte contains 1 bit per row in the column immediately preceding the specified effect. Bit 0 = Row 1, Bit 1 = Row 2, Bit 2 = Row 3, Bit 3 = Row 4

Example: If effect ID is in Column 2, Row 2 and the effects in preceding Column 1 Row 1 and Column 1 Row 2 are connected to it then bits 0 and 1 would be set in the connected byte for a value of 0x03.

Example Message:

From host to Axe-FX II:

F0 00 01 74 03 20 26 F7

Response from Axe-FX II:

F0 00 01 74 03 20 00 00 00 00 48 01 02 00 00 00 00 00 00 00 00 00 00 00 00 00 49 01 02 00 00 00 00 00 00 00 00 00 00 00 00 00 4A 01 02 00 00 00 00 00 00 00 00 00 00 00 00 00 05 01 02 00 00 00 00 00 00 00 00 00 00 00 00 00 6A 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 6C 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 4B 01 02 00 00 00 00 00 00 00 00 00 00 00 00 00 4C 01 02 00 00 00 00 00 00 00 00 00 00 00 00 00 4D 01 02 00 00 00 00 00 00 00 00 00 00 00 00 00 4E 01 02 00 00 00 00 00 00 00 00 00 00 00 00 00 4F 01 02 00 00 00 00 00 00 00 00 00 00 00 00 00 50 01 02 00 00 00 00 00 00 00 00 00 75 F7


Message:

SYSEX_RESYNC

0x21

Function:

Message sent by the device to the host if the user makes a change to the parameter of an effect via the front panel of the device. This allows the host to resync with the device (refreshing the parameters currently displayed on screen for example).

Error Codes:

None

Message Format:

From device to host:

Header - As specified Above

Message Type - 0x21

        Checksum

        0xF7

Example Message:

From Axe-FX II to host:

F0 00 01 74 03 21 27 F7


Message:

SYSEX_SET_DEFAULTS

0x22

Function:

Message sent by the host to the device to set all parameter values for the specified effect ID to their default values. Device will respond with SYSEX_STATUS_MSG indicating either success (0) or an error code.  

Error Codes:

MIDI_ERROR_INVALID_FXID - Invalid effect ID specified

Message Format:

From host to device:

Header - As specified Above

Message Type - 0x22

        Effect ID - 14-bits sent as 2 MIDI bytes (LSB first)

        Checksum

        0xF7

Example Message:

From Axe-FX II to host: Set Amp 1 block to defaults:

F0 00 01 74 03 22 6A 00 4E F7

From Axe-FX II to host: Set Drive 1 block to defaults:

F0 00 01 74 03 22 06 01 23 F7

Response from host: Valid command received

F0 00 01 74 03 64 22 00 40 F7


Message:

SYSEX_LOOPER_STATE

0x23

Function:

Message sent by the host to the device to toggle on/off the broadcast of the status of the looper state machine. Device will respond to the host with a continuous broadcast of this message containing the current status of the looper. When turning OFF broadcast, device will respond with a SYSEX_STATUS_MSG error code (0) implying broadcast was successfully turned off.

Error Codes:

None

Message Format:

From device to host:

Header - As specified Above

Message Type - 0x23

Data byte - Toggle on (1) or off (0) broadcast of the Looper status.

        Checksum

        0xF7

From host to device:

When turned on:

Header - As specified Above

Message Type - 0x23

Looper Status - Two 7-bit MIDI bytes

        Byte 1:

        Bit 0: Looper Record

        Bit 1: Looper Play

        Bit 2: Looper Once

        Bit 3: Looper Overdub

        Bit 4: Looper Reverse

        Bit 5: Looper Half

        Bit 6: Looper Undo

Byte 2:

        Looper Position (where 0 is start of loop and 127 is end of loop)

        Checksum

        0xF7

When turned off:

        SYSEX_STATUS_MSG error code (0).

Example Message:

From host to Axe-FX II (turn on broadcast):

F0 00 01 74 03 23 01 24 F7

From host to Axe-FX II (turn off broadcast):

F0 00 01 74 03 23 00 25 F7

Response from Axe-FX II (looper recording, note looper position is fixed while recording):

F0 00 01 74 03 23 01 7F 5B F7

Response from Axe-FX II (looper playing, note looper position incrementing during playback):

F0 00 01 74 03 23 02 00 27 F7

F0 00 01 74 03 23 02 03 24 F7

F0 00 01 74 03 23 02 07 20 F7


Message:

SYSEX_MOVE_EFFECT

0x24

Function:

Message sent by the host to the device to move a specified effect, row, or column on the grid for the preset currently loaded in the edit buffer.

Note: If a command is given to move an effect to a grid position that is already occupied, the around the Axe-FX II will SWAP the positions of the two effects.

Error Codes:

MIDI_ERROR_BAD_ARGUMENT - Invalid move operation specified

MIDI_ERROR_BAD_GRID_POS - Invalid grid position specified

Message Format:

From device to host:

Header - As specified Above

Message Type - 0x24

        Move Operation - 1 Data byte. Valid values are:

                0  = Move Left

                1 = Move Right

                2 = Move Up

                3 = Move Down

                4 = Move Column Left

                5 = Move Column Right

                6 = Move Row Up

                7 = Move Row Down

        Count - Number of positions to move (1 Data byte)

        Position - Position on the grid being moved (valid values are 0-47)

        Checksum

        0xF7

Example Message:

From Axe-FX II to host: Move effect currently located in Row 2 Column 2 (grid position 5) to the right by 2 counts.

F0 00 01 74 03 24 01 02 0D

Response from host: Valid command received

F0 00 01 74 03 64 24 00 46 F7


Message:

SYSEX_FW_UPDATE

0x25

Function:

Message sent by the host to the device to arm the device for receiving a firmware update. This is the MIDI equivalent to using the front panel to navigate to the Firmware tab in the Utility menu and pressing enter. When valid command is received the device will display “Awaiting FW File” on front panel display and return a SYSEX_STATUS_MSG error code (0) indicating success.

Error Codes:

MIDI_ERROR_NOT_RDY_FOR_FW_UPD - Device is already armed for FW update or unable to accept for some other reason.

Message Format:

Header - As specified Above

Message Type - 0x25

Checksum

0xF7

Example Message:

From host to Axe-FX II:

F0 00 01 74 03 25 23 F7

From Axe-FX II to host (valid command received):

F0 00 01 74 03 64 25 00 47 F7


Message:

SYSEX_FPGA_UPDATE

0x26

Not currently used


Message:

SYSEX_MICRO_UPDATE

0x27

Not currently used


Message:

SYSEX_GET_PARAM_STRINGS

0x28

Function:

Message sent by the host to the device to request the parameter strings for a specified effect parameter.  Example parameters with strings include Amp type, Cabinet type, etc.

A successful response from the device to the host will be a SYSEX_GET_PARAM_STRINGS message containing a listing of strings each separated by a NULL-terminator.  Upon failure a SYSEX_STATUS_MSG will be sent with one of the following error codes.

Error Codes:

MIDI_ERROR_INVALID_FXID

MIDI_ERROR_INVALID_PARAMID

MIDI_ERROR_NULL_DATA

Message Format:

From host to device:

Header - As specified Above

Message Type - 0x28

Effect ID - 14 bits over 2 MIDI bytes

Parameter ID - 14 bits over 2 MIDI bytes

Checksum

0xF7

From device to host:

Header - As specified Above

Message Type - 0x28

Data Payload - 1 MIDI byte per char.

 Total length = (Number of chars per string + 1 null)  * number of types for

that parameter

Checksum

0xF7

Example Message:

From host to Axe-FX II (Get CABINET_MICL param String for Cabinet 1):

F0 00 01 74 03 28 6C 00 01 00 43 F7

From Axe-FX II to host:

F0 00 01 74 03 28 4E 4F 4E 45 00 35 37 20 44 59 4E 00 35 38 20 44 59 4E 00 34 32 31 20 44 59 4E 00 38 37 41 20 43 4F 4E 44 00 55 38 37 20 43 4F 4E 44 00 45 36 30 39 20 44 59 4E 00 52 45 31 36 20 44 59 4E 00 52 31 32 31 20 43 4F 4E 44 00 44 31 31 32 20 44 59 4E 00 36 37 20 43 4F 4E 44 00 75 F7


Message:

SYSEX_SET_SCENE

0x29

Function:

Message sent by the host to the device to set the scene for the preset currently loaded in the edit buffer. Device will respond to host with a SYSEX_SET_SCENE message type specifying the currently selected scene.

Error Codes:

None

Message Format:

From host to device:

Header - As specified Above

Message Type - 0x29

Scene - 1 Data Byte. Values of 0-7 select scenes 1-8. A value of 0x7F does not set a scene but returns the currently selected scene (for polling purposes).

Checksum

0xF7

From device to host:

Header - As specified Above

Message Type - 0x28

Scene - 1 Data Byte specifying currently selected scene.

Checksum

0xF7

Example Message:

From host to Axe-FX II, set currently loaded Axe-FX II preset to Scene 4:

F0 00 01 74 03 29 03 4C F7

Response from Axe-FX II:

F0 00 01 74 03 29 03 2C F7

From host to Axe-FX II, request current scene:

F0 00 01 74 03 29 03 2C F7

Response from host (current scene is 8):

F0 00 01 74 03 29 07 28 F7


Message:

SYSEX_GET_FLAGS

0x2A

Function:

Message sent by the host to the device request various system flags. Device will respond to host with a SYSEX_GET_FLAGS message type containing these system flags.

Error Codes:

None

Message Format:

From host to device:

Header - As specified Above

Message Type - 0x2A

Checksum

0xF7

From device to host:

Header - As specified Above

Message Type - 0x2A

1 Data Byte with the following data bits:
        Bit 0: Patch Edited (0 = no, 1 = yes)

        Bit 1: Power Amp Bypass global setting (0 = off, 1 = on)

        Bit 2: Cabinet Bypass global setting (0 = off, 1 = on)

        Bit 3: Use tuner offset global setting (0 = off, 1 = on)

Checksum

0xF7

Example Message:

From host to Axe-FX II:

F0 00 01 74 03 2A 2C F7

From Axe-FX II to host (patch has been edited, cabinet bypass is turned ON)

F0 00 01 74 03 2A 05 29 F7


Message:

SYSEX_MODIFIER_DUMP

0x2B

Function:

Message sent by the host to the device to request a dump of all modifiers associated with a specified effect ID. Device will respond to the host with a SYSEX_MULTIMSG_START containing the number of modifiers to follow. Then it will respond with one SYSEX_MODIFIER message per modifier. Finally, a SYSEX_MULTIMSG_END signifying the end of the transmission.

Error Codes:

None

Message Format:

From host to device:

Header - As specified Above

Message Type - 0x2B

Effect ID - 14-bits sent as 2 MIDI bytes (LSB first)

Checksum

0xF7

From device to host:

Header - As specified Above

Message Type - 0x2B

Effect ID - 14-bits sent as 2 MIDI bytes (LSB first)

Number of modifier parameters to follow - 1 MIDI Byte

Data payload:

Modifier Parameters - 21-bits per param sent as 3 MIDI bytes (LSB first)

Checksum

0xF7

Axe-FX II will also send “dummy” messages back to host where Effect ID is 0. These can be ignored.

Example Message:

From host to Axe-FX II (Request Mod Params for Wah 1):

F0 00 01 74 03 2B 7C 00 51 F7

From Axe-FX II to host (15 modifier params returned)

F0 00 01 74 03 2C 7C 00 0F 0A 00 00 00 00 00 7E 7F 03 00 00 00 7F 7F 01 7E 7F 03 7F 7F 01 0F 05 00 7C 00 00 05 00 00 02 00 00 00 00 00 00 00 00 7F 7F 01 7F 7F 01 22 F7


Message:

SYSEX_MODIFIER

0x2C

Function:

Message sent by the host to the device to set a modifier for a specified effect ID.  The next free modifier will be set with the sent list of params.

These messages are of the same format as SYSEX_MODIFIER_DUMP so that modifiers dumped using the SYSEX_MODIFIER_DUMP method could then be set sending a SYSEX_MODIFIER from the host to the device.

 

Axe-FX II will respond with error message or null SYSEX_STATUS_MSG message indicating modifier was successfully set.

Error Codes:

MIDI_ERROR_INVALID_FXID - Invalid Effect ID specified

MIDI_ERROR_FX_NOT_IN_USE - Effect ID specified is not currently in use

MIDI_ERROR_NO_MODIFIERS_LEFT - No free modifiers could be found

Message Format:

From host to device:

Header - As specified Above

Message Type - 0x2C

Effect ID - 14-bits sent as 2 MIDI bytes (LSB first)

Number of modifier parameters to follow - 1 MIDI Byte

Data payload:

Modifier Parameters - 21-bits per param sent as 3 MIDI bytes (LSB first)

Checksum

0xF7

Example Message:

From host to Axe-FX II (Set modifier 1 for Wah 1):

F0 00 01 74 03 2C 7C 00 0F 0A 00 00 00 00 00 7E 7F 03 00 00 00 7F 7F 01 7E 7F 03 7F 7F 01 0F 05 00 7C 00 00 05 00 00 02 00 00 00 00 00 00 00 00 7F 7F 01 7F 7F 01 22 F7

From Axe-FX II to host:

F0 00 01 74 03 64 2C 00 4E F7


Message:

SYSEX_SET_CAB_NAME

0x2D

This function has been deprecated as it will not be supported by Axe-FX XL.

Function:

Message sent by the host to the device to set the cab name for a specified user cab slot.

Axe-FX II will respond with error message or SYSEX_STATUS_MSG message indicating cab name was successfully set.

Error Codes:

MIDI_ERROR_BAD_MSG_LENGTH - Message was illegal length

Message Format:

From host to device:

Header - As specified Above

Message Type - 0x2D

User Cab # - 1 MIDI byte (Value must be < # of user cab slots)

Name: 32 ASCII chars (1 MIDI byte per char). Last char should be null.

Checksum

0xF7

Example Message:

From host to Axe-FX II (User cab 3 to name “Nice Cab”):

F0 00 01 74 03 2D 02 4E 69 63 65 20 43 61 62 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 68 F7

From Axe-FX II to host:

F0 00 01 74 03 64 2D 00 4F F7


Message:

SYSEX_SET_PARAM_DIRECT

0x2E

Function:

Message sent by the host to the device to directly set the parameter value of a specified parameter for a specified effect ID.  If successful, device will respond with a SYSEX_PARAM_SET message containing the actual param value and the param string.  If not successful, device will respond with SYSEX_STATUS_MSG containing error code.

Error Codes:

MIDI_ERROR_INVALID_FXID - Invalid effect ID specified

MIDI_ERROR_INVALID_PARAMID - Invalid parameter ID specified

Message Format:

From host to device:

Header - As specified Above

Message Type - 0x2E

Effect ID - 14-bits sent as 2 MIDI bytes (LSB first)

Param ID - 14 bits sent as 2 MIDI bytes (LSB first)

Param Value - 32 bits sent as 5 MIDI bytes (LSB first). Standard IEEE 32-bit format.

Checksum

0xF7

Note: Param value is entered based on displayed value for that particular parameter. For example, for an Amp Drive parameter the valid floating point values would be 0.0 to 10.0.

For Amp Comp valid values would be 0.0 to 100.0.

From Device to Host:

Header - As specified above

Message Type - 0x02 (SYSEX_PARAM_SET)

Effect ID - 14 bits over 2 MIDI bytes (LSB) first

Parameter ID - 14 bits over 2 MIDI bytes (LSB) first

Parameter Value - 16 bit Int over 3 MIDI bytes (LSB) first

Knob Value - 1 MIDI byte, value 0-127

Parameter Limits (Integer types only, Log and Lin types return 0’s)-

        Low Limit - 2 MIDI bytes (LSB) first

        High Limit - 2 MIDI bytes (LSB) first

Null-Terminated Value String. Length equal to # of char’s in value string. 1 byte per char.

checksum

0xF7 (end)

Example Message:

From host to Axe-FX II, Amp 1 Set Drive to 6.0 (Floating point representation of 6.0 is 0x40C00000)

F0 00 01 74 03 2E 6A 00 01 00 00 00 00 06 04 41 F7

From Axe-FX II to host:

F0 00 01 74 03 02 6A 00 01 00 18 33 02 4C 00 00 00 00 36 2E 30 30 00 12 F7


Message:

SYSEX_BPM

0x2F

Function:

Message sent by the host to the device to query the current tempo (in bpm). Host will respond to the device with a SYSEX_BPM type message containing the current tempo.

Error Codes:

None

Message Format:

From host to device:

Header - As specified Above

Message Type - 0x2F

Checksum

0x7F

From device to host:

Header - As specified Above

Message Type - 0x2F

Tempo - 14 bits sent as 2 MIDI bytes (LSB first)

Checksum

F7

Example Message:

From host to device:

F0 00 01 74 03 2F 29 F7

From device to host (Axe-FX II set to 138 bpm):

F0 00 01 74 03 2F 0A 01 22 F7


Message:

SYSEX_GET_GRAPH

0x30

Function:

Message sent by the host to the device request the relevant graph data for the most recently polled effect. Device will respond with a SYSEX_GET_GRAPH type message containing a data payload with the graph.

Error Codes:

None

Message Format:

From host to device:

Header - As specified Above

Message Type - 0x30

Checksum

0x7F

From device to host:

Header - As specified Above

Message Type - 0x30

Graph Data Payload - 128 graph points sent as 2 MIDI bytes (LSB first) per point.

Checksum

F7

Example Message:

From host to device:

F0 00 01 74 03 30 36 F7

From device to host:

F0 00 01 74 03 30 7F 00 7F 02 7F 04 7F 06 7F 08 7F 0A 7F 0C 7F 0E 7F 10 7F 12 7F 14 7F 16 7F 18 7F 1A 7F 1C 7F 1E 7F 20 7F 22 7F 24 7F 26 7F 28 7F 2A 7F 2C 7F 2E 7F 30 7F 32 7F 34 7F 36 7F 38 7F 3A 7F 3C 7F 3E 3F 3F 3F 3E 3F 3D 3F 3C 3F 3B 3F 3A 3F 39 3F 38 3F 37 3F 36 3F 35 3F 34 3F 33 3F 32 3F 31 3F 30 3F 2F 3F 2E 3F 2D 3F 2C 3F 2B 3F 2A 3F 29 3F 28 3F 27 3F 26 3F 25 3F 24 3F 23 3F 22 3F 21 3F 20 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 3F 1F 3F 1E 3F 1D 3F 1C 3F 1B 3F 1A 3F 19 3F 18 3F 17 3F 16 3F 15 3F 14 3F 13 3F 12 3F 11 3F 10 3F 0F 3F 0E 3F 0D 3F 0C 3F 0B 3F 0A 3F 09 3F 08 3F 07 3F 06 3F 05 3F 04 3F 03 3F 02 40 01 40 00 36 F7


Message:

SYSEX_TM_DATA

0x31

Function:

When this message sent by the host to the device it will request a dump of the Tone Match data block. When this message is sent by the device to the host it will contain the Tone Match payload data. Payload data is sent as 8192 floating point words (5 MIDI bytes per 32-bit word).

Error Codes:

None

Message Format:

From host to device:

Header - As specified Above

Message Type - 0x31

Checksum

0x7F

From device to host:

Header - As specified Above

Message Type - 0x31

Tone Match Data Payload - 5 MIDI bytes per word (LSB first) * 64 words per packet * 128 Packets = 40960 MIDI bytes

Checksum

0x7F

Example Message:

From host to device:


Message:

SYSEX_MULTIMSG_START

0x32

Function:

Message sent by the device to the host as a predecessor to a series of other SYSEX messages. The purpose is to tell the host how many SYSEX messages of a specific type will follow.  When a series of SYSEX messages is sent the format is:

SYSEX_MULTIMSG_START

Series of SYSEX messages

SYSEX_MULTIMSG_END

Error Codes:

None

Message Format:

From host to device:

Header - As specified Above

Message Type - 0x31
Type of Sysex messages to follow (i.e. SYSEX_CABNAME)

Number of SYSEX messages to follow - 2 MIDI Bytes - 7 bits each (LSB first)

Checksum

0xF7

Example Message:


Message:

SYSEX_MULTIMSG_END

0x33

Function:

Message sent by the device to the host as a conclusion to a series of other SYSEX messages. The purpose is to tell the host how many SYSEX messages of a specific type will follow.  When a series of SYSEX messages is sent the format is:

SYSEX_MULTIMSG_START

Series of SYSEX messages

SYSEX_MULTIMSG_END

Error Codes:

None

Message Format:

From host to device:

Header - As specified Above

Message Type - 0x33

Checksum

0xF7

Example Message:


Message:

SYSEX_ERASE_SECTOR

0x34


Message:

SYSEX_GET_CONFIG

0x35

Function:

(Added in Axe-Fx II FW 10.11)

Message sent by the host to the device to request the the value of a Configuration parameter by its offset. Device will respond with a SYSEX_GET_CONFIG type message containing the configuration parameter value.

Error Codes:

None

Message Format:

From host to device:

Header - As specified Above

Message Type - 0x35

Parameter Offset - 2 MIDI Bytes

Checksum

0x7F

From device to host:

Header - As specified Above

Message Type - 0x35

Parameter Offset - 2 MIDI Bytes

Parameter Value - 3 MIDI Bytes

Checksum

F7


Message:

SYSEX_GET_GRAPHN

0x36

Function:

(Added in Axe-Fx II FW 10.11)

Message sent by the host to the device to request the relevant graph data for the most recently polled effect via graph index. Device will respond with a SYSEX_GET_GRAPHN type message containing a data payload with the graph.

Error Codes:

None

Message Format:

From host to device:

Header - As specified Above

Message Type - 0x36

Graph Index - 1 MIDI Byte

Checksum

0x7F

From device to host:

Header - As specified Above

Message Type - 0x36

Graph Data Payload - 128 graph points sent as 2 MIDI bytes (LSB first) per point.

Checksum

F7

Example Message:

From host to device:

F0 00 01 74 03 30 36 F7

From device to host:

F0 00 01 74 03 30 7F 00 7F 02 7F 04 7F 06 7F 08 7F 0A 7F 0C 7F 0E 7F 10 7F 12 7F 14 7F 16 7F 18 7F 1A 7F 1C 7F 1E 7F 20 7F 22 7F 24 7F 26 7F 28 7F 2A 7F 2C 7F 2E 7F 30 7F 32 7F 34 7F 36 7F 38 7F 3A 7F 3C 7F 3E 3F 3F 3F 3E 3F 3D 3F 3C 3F 3B 3F 3A 3F 39 3F 38 3F 37 3F 36 3F 35 3F 34 3F 33 3F 32 3F 31 3F 30 3F 2F 3F 2E 3F 2D 3F 2C 3F 2B 3F 2A 3F 29 3F 28 3F 27 3F 26 3F 25 3F 24 3F 23 3F 22 3F 21 3F 20 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 7F 1F 3F 1F 3F 1E 3F 1D 3F 1C 3F 1B 3F 1A 3F 19 3F 18 3F 17 3F 16 3F 15 3F 14 3F 13 3F 12 3F 11 3F 10 3F 0F 3F 0E 3F 0D 3F 0C 3F 0B 3F 0A 3F 09 3F 08 3F 07 3F 06 3F 05 3F 04 3F 03 3F 02 40 01 40 00 36 F7


Message:

SYSEX_EDIT_EFFECT

0x37

Function:

(Added in Axe-Fx II FW 10.12)

Brings up the edit GUI for the specified effect ID (or control block).  This is primarily intended to refresh the effect so that any graphs can be read.  Device will respond with SYSEX_STATUS_MSG indicating either success (0) or an error code.

Error Codes:

MIDI_ERROR_INVALID_FXID

Message Format:

From host to device:

Header - As specified Above

Message Type - 0x37

Effect ID - 14-bits sent as 2 MIDI bytes (LSB first)

Checksum

0xF7


Message:

SYSEX_BROADCAST_KNOB

0x38

Function:

(Added in Axe-Fx II FW 10.12)

Function:

Message sent by the host to the device to toggle on/off the broadcast of up to 16 modifier-connected parameter knob positions. Device will respond to the host with a continuous broadcast of this message containing up to 16 pairs of parameter Ids and knob position values (0-127) at a rate of 10 Hz. When turning broadcast ON or OFF, device will respond with a SYSEX_STATUS_MSG error code (0) implying broadcast state was successfully changed.

Error Codes:

None

Message Format:

From device to host:

Header - As specified Above

Message Type - 0x38

Count - 1 Midi byte. Valid values are 0 - 16. Sending 0 disables the broadcast.

Parameter Ids - 2 Midi Bytes each.  The message can contain up to 16 ids.

        Checksum

        0xF7

From host to device:

When turned on:

Header - As specified Above

Message Type - 0x38

Up to 16 pairs of:

        Parameter Id - 2 Midi Bytes

        Knob Position - 1 Midi Bytes

        Checksum

        0xF7

When turned on/off:

        SYSEX_STATUS_MSG error code (0).


Message:

SYSEX_BROADCAST_MODIFIER

0x39

Function:

(Added in Axe-Fx II FW 10.12)

Function:

Message sent by the host to the device to toggle on/off the broadcast of a given modifier’s LFO X position in the modifier graph . Device will respond to the host with a continuous broadcast of this message containing the current x-position at a rate of 10 Hz.  When turning broadcast ON or OFF, device will respond with a SYSEX_STATUS_MSG error code (0) implying broadcast state was successfully changed.

Error Codes:

None

Message Format:

From device to host:

Header - As specified Above

Message Type - 0x39

Enable - 1 Midi byte. Valid values are 0 (off) - 1 (on).

Modifier Id - 1 Midi Bytes.  Valid values are 0 - 23.

Checksum

        0xF7

From host to device:

When turned on:

Header - As specified Above

Message Type - 0x39

X Position - 1Midi Bytes.

        Checksum

        0xF7

When turned on/off:

        SYSEX_STATUS_MSG error code (0).


Message:

SYSEX_GET_POSITION

0x3A

Function:

(Added in Axe-Fx II FW 11.00)

Function:

Message sent by the host to the device to query the currently selected position in the device grid. Device will respond with the position.

Error Codes:

None

Message Format:

From device to host:

Header - As specified Above

Message Type - 0x3A

Checksum

        0xF7

From host to device:

Header - As specified Above

Message Type - 0x3A

Position - 1 MIDI Bytes.

        Checksum

        0xF7


Message:

SYSEX_SET_MODPARAM_DIRECT

0x3B

Function:

(Added in Axe-Fx II FW 11.00)

Function:

Message sent by the host to the device to directly set the value of a specified modifier-parameter for a specified effect ID and effect-parameter.  If successful, device will respond with a SYSEX_MODIFIER_SET message containing the actual param value and the param string.  If not successful, device will respond with SYSEX_STATUS_MSG containing error code.

Error Codes:

MIDI_ERROR_INVALID_FXID

MIDI_ERROR_INVALID_PARAMID

MIDI_ERROR_FX_NOT_IN_USE

MIDI_ERROR_NO_MODIFIERS_LEFT

Message Format:

From device to host:

Header - As specified Above

Message Type - 0x3B

Effect ID - 2 Midi Bytes

Effect-Parameter Id - 2 Midi Bytes

Modifier-Parameter Id - 2 Midi Bytes

Modifier-Parameter Value - 32 bits sent as 5 MIDI bytes (LSB first). Standard IEEE 32-bit format.

Checksum

        0xF7

Note: Param value is entered based on displayed value for that particular parameter. For example, for an Amp Drive parameter the valid floating point values would be 0.0 to 10.0.

For Amp Comp valid values would be 0.0 to 100.0.

From Device to Host:

Header - As specified above

Message Type - 0x07 (SYSEX_MODIFIER_SET)

Effect ID - 14 bits over two MIDI bytes (LSB first)

Effect param ID - 14 bits over two MIDI bytes (LSB first)

Modifier parameter - 14 bits over two MIDI bytes (LSB first)

Modifier value - 16 bits over three MIDI bytes (LSB first)

Null terminated Value String

checksum

0xF7 (end)

 


Message:

SYSEX_RECALL_PATCH

0x3C

Function:

(Added in Axe-Fx II FW 11.00)

Function:

Message sent by the host to the device to load the given patch to avoid problems with PC when "Ignore redundant PC" is enabled.  Device responds with a SYSEX_STATUS_MSG.

Error Codes:

MIDI_ERROR_BAD_ARGUMENT

Message Format:

From device to host:

Header - As specified Above

Message Type - 0x3C

Bank - 1 Midi Byte

Patch - 1 Midi Byte

Checksum

        0xF7

From host to device:

Header - As specified Above

Message Type - 0x3A

Position - 1 MIDI Bytes.

        Checksum

        0xF7

From host to device:

        See SYSEX_STATUS_MSG.


Message:

SYSEX_FAILSAFE_FW_UPDATE

0x3D

Function:

(Axe-Fx II XL specific)

Function:

TBD

Error Codes:

TDB

Message Format:

From device to host:

Header - As specified Above

Message Type - 0x3D

...

Checksum

        0xF7

From host to device:

TBD

From host to device:

        TBD.


Message:

SYSEX_MUTE

0x3E

Function:

(Added in Axe-Fx II FW 12.04)

Function:

Message sent by the host to the device to toggle the mute state of the outputs.  Device responds with a SYSEX_STATUS_MSG.

Error Codes:

MIDI_ERROR_BAD_ARGUMENT

Message Format:

From device to host:

Header - As specified Above

Message Type - 0x3E

Mute-State - 1 Midi Byte (0=all outputs off, 1=all outputs on)  Uses negative logic.

Checksum

        0xF7

From host to device:

Header - As specified Above

Message Type - 0x3A

Position - 1 MIDI Bytes.

        Checksum

        0xF7

From host to device:

        See SYSEX_STATUS_MSG.


Message:

SYSEX_SET_IRCAP_NAME

0x3F

Function:

Used by host to set the name and location of the current IR Capture. Device will respond with SYSEX_STATUS_MSG indicating either success (0) or an error code.

Error Codes:

MIDI_ERROR_BAD_MSG_LENGTH - Wrong number of characters in message.

Format:

From host to device:

Header - As specified above

Message Type - 0x09

User Cab Slot: 2 MIDI Bytes

Name: 32 MIDI bytes, 1 byte per char. (ASCII format, values must be less than 128).

Last char is null 0x0.

Checksum

0xF7

From device to host:

        See SYSEX_STATUS_MSG.


Message:

SYSEX_CONTROL_IRCAP

0x40

Function:

(Added in Axe-Fx II FW 13.00)

Function:

Message sent by the host to the device to remotely control the IR Capture.  Device responds with a SYSEX_STATUS_MSG and, depending on the operation, additional data.

Error Codes:

MIDI_ERROR_BAD_ARGUMENT

Message Format:

From device to host:

Header - As specified Above

Message Type - 0x3E

Operation- 1 Midi Byte

        0: switch to the IR Capture GUI (must be called first)

1: Test

2: Capture

3: Save

4: Dump cab - Will additionally send a SYSEX_CABIR_START/DATA/END messages.

5: Dump raw - Will additionally send a SYSEX_RAWIR_START/DATA/END messages.

Checksum

        0xF7

From device to host:

        See SYSEX_STATUS_MSG.

        See SYSEX_CABIR_START/DATA/END.

        See SYSEX_RAWIR_START/DATA/END


Message:

SYSEX_DELETE_CABIR

0x41

Function:

Message sent by device to host to request the cab IR at the given user slot be deleted.   The host responds with a SYSEX_STATUS_MSG.

Error Codes:

See table above for list of potential error codes.

Message Format:

Header - As specified above

Message Type - 0x41

User Cab Slot - 2 Midi Bytes

Checksum

0xF7


Message:

SYSEX_STATUS_MSG

0x64

Function:

Message sent by device to host indicating a status update. Could be a periodic update message or could be a return error message.

Error Codes:

See table above for list of potential error codes.

Message Format:

Header - As specified above

Message Type - 0x64

Input Sysex Message Type (when applicable)

Return Error

Checksum

0xF7

        


Message:

SYSEX_CABIR_START

0x7a

Function:

Message sent by device to indicate the start of a cabinet data transfer. No response message is expected.

Error Codes:

None

Message Format for Axe-Fx II:

Header - As specified above

Message Type - 0x7a

Cabinet Number - 1 MIDI byte. Cabinet Index starts at 0x0 and extends to 0x63 inclusive  for 100 user slots (User Cab 1 = 0x0).

       Special Cab Numbers:

Number of Image words in Payload (14 bits over 2 bytes, LSB first)

Checksum

0xF7 (end)

Message Format for Axe-Fx II XL:

Header - As specified above

Message Type - 0x7a

Cabinet Number  - 2 MIDI bytes. Cabinet Index starts at 0x0 and extends to 0x1FF inclusive for 512 user slots (User Cab 1 = 0x0).

       Special Cab Numbers:

Number of Image words in Payload (14 bits over 2 bytes, LSB first)

Checksum

0xF7 (end)

Example Messages:

Axe-FX II, dumping user cab 10, 2048 bytes in length

F0 00 01 74 03 7A 7F 00 10 CHECKSUM F7


Message:

SYSEX_CABIR_DATA

0x7b

Function:

Message sent by device containing payload data for a cabinet IR dump. Payload data is 32-bit words sent as 5 MIDI bytes (LSB first). No response message is expected.

Error Codes:

None

Message Format:

Header - As specified above

Message Type - 0x7b

Words in Payload (14 bits over 2 bytes, LSB first)

Payload Data - 32 words (32 bits over 5 7-bit bytes, LSB first)

Checksum

0xF7 (end)

Example Messages:

F0 00 01 74 05 7b 20 00 (PAYLOAD = 32 * 5 = 160 total bytes) CHECKSUM F7


Message:

SYSEX_CABIR_END

0x7c

Function:

Message sent by device to indicate the end of a cabinet transfer. No response message is expected.

Error Codes:

None

Message Format:

Header - As specified above

Message Type - 0x7C

Image Checksum (32-bit word sent as 5 7-bit bytes, LSB first)

Checksum

0xF7 (end)

Example Messages:

F0 00 01 74 05 7C IMAGE_CHECKSUM CHECKSUM F7


Message:

SYSEX_EFFECT_START

0x74

Function:

Message sent by device to host or from host to device to indicate the start of an effect block data transfer. No response message is expected.

This message was modified on 1/14/2014 to include the 4-bits necessary to reference the 10 possible Global Block indices.  To remain backward compatible, Bit 3 which was reserved is now bit 3 of the Global Block Index.

Error Codes:

None

Message Format:

Header - As specified above

Message Type - 0x74

Effect ID - 14 bits sent as 2 MIDI bytes (LSB first)

Number of Params to follow - 14 bits sent as 2 MIDI bytes (LSB first)

General Effect Data Byte - 1 MIDI byte

        Bit 0: number of alt settings

        Bit 1: current alt setting

        Bit 2: bypassed

        Bit 3: bit 3 of the global block reference ( see note above )

        Bit 4-6: bits 0 - 2 of the global block reference

Checksum

0xF7 (end)

Example Messages:

Axe-FX II sending Drive 1:

F0 00 01 74 03 74 05 01 28 00 01 5F F7


Message:

SYSEX_EFFECT_DATA

0x75

Function:

Message sent by device to host or from host to device containing the data payload for an effect block. No response is expected.

Error Codes:

None

Message Format:

Header - As specified above

Message Type - 0x75

Count byte - Parameters in this payload (Up to 64)

Parameter Data - 21 bits per parameter sent as 3 MIDI bytes (LSB first)

Checksum

0xF7 (end)

Example Messages:

Axe-FX II sending Drive 1:

F0 00 01 74 03 75 28 00 02 00 00 71 3B 01 53 46 02 71 25 01 7E 7F 03 00 00 00 00 00 00 00 00 00 0F 1A 03 7E 7F 03 00 00 00 32 06 02 7F 7F 01 7F 7F 01 1E 01 02 7F 7F 01 00 00 00 00 00 00 7F 7F 01 7E 7F 03 00 00 00 71 7F 01 7F 7F 01 7F 7F 01 7E 7F 03 00 00 00 24 74 01 00 00 00 12 7A 00 00 60 03 06 00 00 65 0C 02 7F 7F 01 7F 7F 01 1E 01 02 7F 7F 01 00 00 00 00 00 00 7F 7F 01 7E 7F 03 4A F7


Message:

SYSEX_EFFECT_END

0x76

Function:

Message sent by device to host or from host to device indicating the end of an effect block transfer. No response is expected.

Error Codes:

None

Message Format:

Header - As specified above

Message Type - 0x76

Checksum

0xF7 (end)

Example Messages:

From Axe-FX II to host:

F0 00 01 74 03 76 70 F7


Message:

SYSEX_PATCH_START

0x77

Function:

Message sent by device to host or from host to device to indicate the start of a patch data transfer. No response message is expected.

Error Codes:

None

Message Format:

Header - As specified above

Message Type - 0x77

Bank Number  (1 byte) - If 0x7F then preset  # has been “stripped” and preset will be sent

    directly to edit buffer.

Patch Number (1 byte) -

Number of Image words in entire preset Payload (14 bits over 2 bytes, LSB first).

Checksum

0xF7 (end)

Example Messages:

Axe-FX II::

F0 00 01 74 03 77 7F 00 00 10 1E F7


Message:

SYSEX_PATCH_DATA

0x78

Function:

Message sent by device to host or from host to device containing data payload for a patch dump. No response message is expected.

Error Codes:

None

Message Format:

Header - As specified above

Message Type - 0x78

Words in Payload (14 bits over 2 7-bit bytes, LSB first)

Payload Data - 64 words (16 bits over 3 7-bit bytes, LSB first)

Checksum

0xF7 (end)

Example Messages:

Axe-FX II:

(too long to paste here)


Message:

SYSEX_PATCH_END

0x79

Function:

Message sent by device to host or from host to device to indicate the end of a patch data transfer. No response message is expected.

Error Codes:

None

Message Format:

Header - As specified above

Message Type - 0x79

Checksum for entire Patch Dump (16 bits over 3 MIDI bytes, LSB first)

Checksum for message

0xF7 (end)

Example Messages:

From Axe-FX II:

F0 00 01 74 03 79 15 6E 07 03 F7


Message:

SYSEX_FW_UPDATE_START

0x7D

Function:

Message sent by device to host indicate the start of a firmware data transfer. NAxe-FX II will respond with error message or null SYSEX_STATUS_MSG message indicating modifier was successfully set.

Error Codes:

MIDI_ERROR_ILLEGAL_MSG

MIDI_ERROR_NOT_RDY_FOR_FW_UPD

Message Format:

Header - As specified above

Message Type - 0x7D

Number of image words to follow - 28 bits sent over 4 MIDI bytes (LSB first)

Checksum

0xF7 (end)

Example Messages:

Axe-FX II:

F0 00 01 74 03 7D 7D 30 17 00 21 F7


Message:

SYSEX_FW_UPDATE_DATA

0x7E

Function:

Message sent by device to host containing a data payload portion of a firmware data transfer.  Axe-FX II will respond with error message or null SYSEX_STATUS_MSG message indicating modifier was successfully set.

Error Codes:

MIDI_ERROR_ILLEGAL_MSG

MIDI_ERROR_BAD_MSG_LENGTH

Message Format:

Header - As specified above

Message Type - 0x7E

Number of image words to follow - 14 bits sent over 2 MIDI bytes (LSB first)

Data payload - 32-bits per word over 5 MIDI bytes

Checksum

0xF7 (end)

Example Messages:

Axe-FX II:

F0 00 01 74 03 7E 20 00 00 0C 62 5A 78 02 00 20 1E 7B 02 10 40 7E 7A 01 20 00 60 02 01 4A 01 40 78 01 4A 01 42 78 00 00 02 40 78 00 00 06 40 78 00 00 0A 40 78 00 00 0E 40 78 01 42 01 40 78 09 42 01 40 78 11 42 01 40 78 19 42 01 40 78 01 44 01 40 78 09 44 01 40 78 11 44 01 40 78 19 44 01 40 78 31 44 01 40 78 39 44 01 40 78 01 40 01 40 78 09 40 01 40 78 00 7E 00 60 78 3A 3E 00 4C 78 00 00 73 5F 00 00 7F 50 10 7B 4C 00 20 0C 7B 00 00 00 5F 7A 00 00 72 5F 78 40 00 20 18 7B 65 31 63 42 00 00 34 00 10 7B 38 F7


Message:

SYSEX_FW_UPDATE_END

0x7F

Function:

Message sent by device to host indicate the end of a firmware data transfer. Axe-FX II will respond with error message or null SYSEX_STATUS_MSG message indicating modifier was successfully set.

Error Codes:

MIDI_ERROR_ILLEGAL_MSG

MIDI_ERROR_IMAGE_SIZE_INCORRECT

MIDI_ERROR_BAD_IMAGE_CHKSUM

Message Format:

Header - As specified above

Message Type - 0x7F

Checksum for entire firmware image - 32-bits sent over 5 MIDI bytes (LSB first)

Checksum

0xF7 (end)

Example Message:

Axe-FX II

F0 00 01 74 03 7F 55 35 39 3D 00 1D F7


Effect ID enumeration table:

        Many MIDI commands require specifying an effect ID value to refer to a specific effect block. The following enumeration table is used to assign an effect ID value to each effect block in the Axe-FX II.

enum

{

        ID_COMP1 = 100,

        ID_COMP2,

        ID_GRAPHEQ1,

        ID_GRAPHEQ2,

        ID_PARAEQ1,

        ID_PARAEQ2,

        ID_DISTORT1,

        ID_DISTORT2,

        ID_CAB1,

        ID_CAB2,

        ID_REVERB1,

        ID_REVERB2,

        ID_DELAY1,

        ID_DELAY2,

        ID_MULTITAP1,

        ID_MULTITAP2,

        ID_CHORUS1,

        ID_CHORUS2,

        ID_FLANGER1,

        ID_FLANGER2,

        ID_ROTARY1,

        ID_ROTARY2,

        ID_PHASER1,

        ID_PHASER2,

        ID_WAH1,

        ID_WAH2,

        ID_FORMANT1,

        ID_VOLUME1,

        ID_TREMOLO1,

        ID_TREMOLO2,

        ID_PITCH1,

        ID_FILTER1,

        ID_FILTER2,

        ID_FUZZ1,

        ID_FUZZ2,

        ID_ENHANCER1,

        ID_LOOP1,

        ID_MIXER1,

        ID_MIXER2,

        ID_NOISEGATE1,

        ID_OUT1,

        ID_CONTROL,

        ID_FBSEND,

        ID_FBRETURN,

        ID_SYNTH1,

        ID_SYNTH2,

        ID_VOCODER1,

        ID_MEGATAP1,

        ID_CROSSOVER1,

        ID_CROSSOVER2,

        ID_GATE1,

        ID_GATE2,

        ID_RINGMOD1,

        ID_PITCH2,

        ID_MULTICOMP1,

        ID_MULTICOMP2,

        ID_QUADCHORUS1,

        ID_QUADCHORUS2,

        ID_RESONATOR1,

        ID_RESONATOR2,

        ID_GRAPHEQ3,

        ID_GRAPHEQ4,

        ID_PARAEQ3,

        ID_PARAEQ4,

        ID_FILTER3,

        ID_FILTER4,

        ID_VOLUME2,

        ID_VOLUME3,

        ID_VOLUME4,

        ID_LOOPER1,

        ID_EQMATCH1

}


Parameter ID enumeration:

// Enumerated params for effects and other adjustable parameters

// The "CTRL" parameters start at 200.  Since these values are not

// stored this allows future expansion of the stored parameters and

// consistency for the shared mixer control functions.

enum

{

        GLOBAL_REVERBMIX,

        GLOBAL_EFFECTSMIX,

        GLOBAL_CABINETBYP,

        GLOBAL_TUNINGREF,

        GLOBAL_PWRAMPBYP,

        GLOBAL_TUNERMUTE,

        GLOBAL_DELAYSPILL,

        GLOBAL_USETUNEOFFSETS,

        GLOBAL_OFFSET1,

        GLOBAL_OFFSET2,

        GLOBAL_OFFSET3,

        GLOBAL_OFFSET4,

        GLOBAL_OFFSET5,

        GLOBAL_OFFSET6,

        GLOBAL_OUT1EQ1,

        GLOBAL_OUT1EQ2,

        GLOBAL_OUT1EQ3,

        GLOBAL_OUT1EQ4,

        GLOBAL_OUT1EQ5,

        GLOBAL_OUT1EQ6,

        GLOBAL_OUT1EQ7,

        GLOBAL_OUT1EQ8,

        GLOBAL_OUT1EQ9,

        GLOBAL_OUT1EQ10,

        GLOBAL_LEVEL1,

        GLOBAL_OUT2EQ1,

        GLOBAL_OUT2EQ2,

        GLOBAL_OUT2EQ3,

        GLOBAL_OUT2EQ4,

        GLOBAL_OUT2EQ5,

        GLOBAL_OUT2EQ6,

        GLOBAL_OUT2EQ7,

        GLOBAL_OUT2EQ8,

        GLOBAL_OUT2EQ9,

        GLOBAL_OUT2EQ10,

        GLOBAL_LEVEL2,

        GLOBAL_AMPGAIN,

        GLOBAL_AMPRES,

        GLOBAL_VERSION,                                        // version to use for amp modeling

        GLOBAL_AMPSORT,                                        // when true use sort by name

        GLOBAL_END,

};

enum

{

        CONTROLLERS_LFO1TYPE,

        CONTROLLERS_LFO1FREQ,

        CONTROLLERS_LFO1DEPTH,

        CONTROLLERS_LFO1DUTY,

        CONTROLLERS_LFO1PHASE,

        CONTROLLERS_LFO1TEMPO,

        CONTROLLERS_LFO2TYPE,

        CONTROLLERS_LFO2FREQ,

        CONTROLLERS_LFO2DEPTH,

        CONTROLLERS_LFO2DUTY,

        CONTROLLERS_LFO2PHASE,

        CONTROLLERS_LFO2TEMPO,

        CONTROLLERS_ADSR1MODE,

        CONTROLLERS_ADSR1RETRIG,

        CONTROLLERS_ADSR1ATTACK,

        CONTROLLERS_ADSR1DECAY,

        CONTROLLERS_ADSR1SUSTAIN,

        CONTROLLERS_ADSR1LEVEL,

        CONTROLLERS_ADSR1RELEASE,

        CONTROLLERS_ADSR1THRESH,

        CONTROLLERS_ADSR2MODE,

        CONTROLLERS_ADSR2RETRIG,

        CONTROLLERS_ADSR2ATTACK,

        CONTROLLERS_ADSR2DECAY,

        CONTROLLERS_ADSR2SUSTAIN,

        CONTROLLERS_ADSR2LEVEL,

        CONTROLLERS_ADSR2RELEASE,

        CONTROLLERS_ADSR2THRESH,

        CONTROLLERS_ENVATTACK,

        CONTROLLERS_ENVRELEASE,

        CONTROLLERS_ENVSENS,                        // Envelope follower sensitivity

        CONTROLLERS_ENVGAIN,                        // Envelope follower output gain

        CONTROLLERS_TEMPO,                                // preset tempo

        CONTROLLERS_TEMPOTOUSE,                        // which tempo to use, stored or global

        CONTROLLERS_SEQFREQ,

        CONTROLLERS_SEQTEMPO,

        CONTROLLERS_SEQSTAGES,

        CONTROLLERS_SEQ1,

        CONTROLLERS_SEQ2,

        CONTROLLERS_SEQ3,

        CONTROLLERS_SEQ4,

        CONTROLLERS_SEQ5,

        CONTROLLERS_SEQ6,

        CONTROLLERS_SEQ7,

        CONTROLLERS_SEQ8,

        CONTROLLERS_SEQ9,

        CONTROLLERS_SEQ10,

        CONTROLLERS_SEQ11,

        CONTROLLERS_SEQ12,

        CONTROLLERS_SEQ13,

        CONTROLLERS_SEQ14,

        CONTROLLERS_SEQ15,

        CONTROLLERS_SEQ16,

        CONTROLLERS_AUTODELAY,                        // when set tapping tempo unbypasses delay

        CONTROLLERS_SEQRUN,

        CONTROLLERS_KNOBA,

        CONTROLLERS_KNOBB,

        CONTROLLERS_KNOBC,

        CONTROLLERS_KNOBD,

        CONTROLLERS_SEQ17,

        CONTROLLERS_SEQ18,

        CONTROLLERS_SEQ19,

        CONTROLLERS_SEQ20,

        CONTROLLERS_SEQ21,

        CONTROLLERS_SEQ22,

        CONTROLLERS_SEQ23,

        CONTROLLERS_SEQ24,

        CONTROLLERS_SEQ25,

        CONTROLLERS_SEQ26,

        CONTROLLERS_SEQ27,

        CONTROLLERS_SEQ28,

        CONTROLLERS_SEQ29,

        CONTROLLERS_SEQ30,

        CONTROLLERS_SEQ31,

        CONTROLLERS_SEQ32,

        CONTROLLERS_LFO1RUNCTRL,                // not exposed directly

        CONTROLLERS_LFO2RUNCTRL,

        CONTROLLERS_SEQRUNCTRL,

        CONTROLLERS_END,

        CONTROLLERS_METLEVEL,

        CONTROLLERS_METONOFF,

};

enum

{

        MOD_CTRTLID,                                        // ID of input controller

        MOD_MIN,

        MOD_MAX,

        MOD_STARTPT,

        MOD_MIDPT,

        MOD_ENDPT,

        MOD_SLOPE,

        MOD_DAMPING,

        MOD_EFFECTID,                                        // ID of effect being controlled

        MOD_PARAM,                                                // parameter being controlled

        MOD_AUTOENGAGE,

        MOD_PCRESET,                                        // Reset on program change

        MOD_OFFVAL,                                                // auto-engage off value

        MOD_SCALE,

        MOD_OFFSET,

        MOD_END,

};

enum

{

        CABINET_TYPEL,

        CABINET_MICL,

        CABINET_TYPER,

        CABINET_MICR,

        CABINET_LINK,

        CABINET_LEVELL,

        CABINET_LEVELR,

        CABINET_PANL,

        CABINET_PANR,

        CABINET_LEVEL,

        CABINET_PAN,

        CABINET_BYPASSMODE,

        CABINET_MODE,                                        // 0 = stereo normal res, 1 = mono hi-res, 2 = mono normal res

        CABINET_BYPASS,

        CABINET_DRIVEL,

        CABINET_DRIVER,

        CABINET_ROOMMIX,

        CABINET_ROOMSIZE,

        CABINET_MICSPACE,

        CABINET_LOCUT,

        CABINET_HICUT,

        CABINET_WARP,

        CABINET_PROXIMITYL,

        CABINET_DIRECT,                                        // lpf'ed direct level

        CABINET_DYNAMICS,

        CABINET_DIRECTFREQ,

        CABINET_DELAYL,

        CABINET_DELAYR,

        CABINET_PROXIMITYR,

//        CABINET_SMOOTH,

        CABINET_END,

};

enum

{

        EQMATCH_MODE,

        EQMATCH_AMOUNT,

        EQMATCH_SMOOTHING,

        EQMATCH_CAPTUREREF,                                // turn on/off capture

        EQMATCH_CAPTUREUSER,

        EQMATCH_MATCH,                                        // run matching function

        EQMATCH_LEVEL,

        EQMATCH_PAN,

        EQMATCH_BYPASSMODE,

        EQMATCH_BYPASS,

        EQMATCH_SOURCE,

        EQMATCH_TIME,                                        // damping

        EQMATCH_REFCHANNEL,

        EQMATCH_USERCHANNEL,

        EQMATCH_REFSOLO,

        EQMATCH_RESOLUTION,

        EQMATCH_TAPER,

        EQMATCH_ACCUMULATE,                                // add results of last match to previous

        EQMATCH_NORM1,                                        // IR normalization value

        EQMATCH_NORM2,

        EQMATCH_LFMATCH,

        EQMATCH_GAIN1,

        EQMATCH_GAIN2,

        EQMATCH_GAIN3,

        EQMATCH_GAIN4,

        EQMATCH_GAIN5,

        EQMATCH_GAIN6,

        EQMATCH_GAIN7,

        EQMATCH_GAIN8,

        EQMATCH_GAIN9,

        EQMATCH_GAIN10,

        EQMATCH_GAIN11,

        EQMATCH_GAIN12,

        EQMATCH_GAIN13,

        EQMATCH_GAIN14,

        EQMATCH_GAIN15,

        EQMATCH_GAIN16,

        EQMATCH_END,

        EQMATCH_DATASTART = 40,

        EQMATCH_DATAEND = 1024+40,

};

enum

{

        COMP_THRESH,

        COMP_RATIO,

        COMP_ATTACK,

        COMP_RELEASE,

        COMP_LEVEL,

        COMP_KNEE,

        COMP_AUTO,                                                // Auto makeup gain (on = 1)

        COMP_PEAKRMS,                                        // Peak/RMS select (peak = 1)

        COMP_CONTOUR,                                        // Engages Low freq rolloff on detector input

        COMP_BYPASS,

        COMP_SIDECHAIN,

        COMP_MIX,

        COMP_TYPE,

        COMP_SUSTAIN,                                        // For pedal type

        COMP_BYPASSMODE,

        COMP_DELAYTIME,

        COMP_AUTOMODE,

        COMP_EMPHASIS,

        COMP_END,

};

enum

{

        OUTPUT_LEVEL1,

        OUTPUT_LEVEL2,

        OUTPUT_LEVEL3,

        OUTPUT_LEVEL4,

        OUTPUT_PAN1,

        OUTPUT_PAN2,

        OUTPUT_PAN3,

        OUTPUT_PAN4,

        OUTPUT_MAIN1,

        OUTPUT_MAIN2,

        OUTPUT_MAIN3,

        OUTPUT_MAIN4,

        OUTPUT_MAIN5,

        OUTPUT_MAIN6,

        OUTPUT_MAIN7,

        OUTPUT_MAIN8,

        OUTPUT_LEVEL,

        OUTPUT_PAN,

        OUTPUT_BYPASSMODE,

        OUTPUT_BYPASS,

        OUTPUT_END,

};

enum

{

        DISTORT_TYPE,

        DISTORT_DRIVE,

        DISTORT_BASS,

        DISTORT_MID,

        DISTORT_TREBLE,

        DISTORT_MASTER,

        DISTORT_HPFREQ,                                        // input highpass freq

        DISTORT_LPFREQ,                                        // preamp output (second waveshaper) lowpass freq

        DISTORT_TONEFREQ,

        DISTORT_TONESPACE,

        DISTORT_BRIGHTCAP,

        DISTORT_WSLPF,                                        // first waveshaper lowpass freq

        DISTORT_XFHPF,

        DISTORT_XFLPF,

        DISTORT_TONELOC,

        DISTORT_INPUTSELECT,

        DISTORT_DEPTH,

        DISTORT_OFFSET1,

        DISTORT_CLIPTYPE2,

        DISTORT_SUPPLYSAG,

        DISTORT_PRESENCE,

        DISTORT_LEVEL,

        DISTORT_PAN,

        DISTORT_BYPASSMODE,

        DISTORT_BETA,

        DISTORT_PRESFREQ,

        DISTORT_SPKRFREQ,

        DISTORT_SPKRGAIN,

        DISTORT_BYPASS,

        DISTORT_DEPTHFREQ,

        DISTORT_HARDNESS1,                                // triode knee hardness

        DISTORT_MVCAP,

        DISTORT_WSHPF,                                        // First waveshaper output highpass freq

        DISTORT_STABILIZER,                                // When true bypass grid cap to increase phase margin

        DISTORT_TONETYPE,                                // When true use vintage tone-stack

        DISTORT_TIMECONST,                                // power supply time constant

        DISTORT_BIAS,                                        // power amp bias: 0 = Class B, 1 = Class A

        DISTORT_FBTYPE,

        DISTORT_SPKRGAIN2,                                // speaker hf response pole freq multiplier 0.2 - 2 (log)

        DISTORT_BRIGHT,                                        // bright switch

        DISTORT_BOOST,                                        // boost switch

        DISTORT_SPKRQ,

        DISTORT_OFFSET2,

        DISTORT_SPKRHFREQ,

        DISTORT_SPKRHGAIN,

        DISTORT_SPKRHQ,

        DISTORT_XDRIVE,

        DISTORT_TRIM,

        DISTORT_HARDNESS2,                                // triode knee hardness

        DISTORT_MVPOSITION,

        DISTORT_SPKRDRIVE,

        DISTORT_GAINDIST,                                // power amp gain distribution

        DISTORT_SCREENFREQ,

        DISTORT_SCREENQ,

        DISTORT_SATSWITCH,

        DISTORT_EQ1,

        DISTORT_EQ2,

        DISTORT_EQ3,

        DISTORT_EQ4,

        DISTORT_EQ5,

        DISTORT_EQ6,

        DISTORT_EQ7,

        DISTORT_EQ8,

        DISTORT_BIASEXCURSION,

        DISTORT_EXCURSIONTIME,

        DISTORT_RECOVERYTIME,

        DISTORT_FEEDFWDFREQ2,                        // triode2 feedforward filter freq

        DISTORT_FEEDFWDFREQ1,                        // triode1 feedforward filter freq

        DISTORT_TUBETYPE,                                // power tube type, 0 = tetrode, 1 = pentode

        DISTORT_VOICING,

        DISTORT_PALPFREQ,

        DISTORT_PAHPFREQ,

//        DISTORT_SPKRMFREQ,                                // mid-frequency resonance

//        DISTORT_SPKRMQ,

        DISTORT_HMFREQ,                                        // homomorphic filters center freq

        DISTORT_HMRATIO,                                // homomorphic filters ratio of pole/zero

        DISTORT_SPKRMGAIN,

        DISTORT_DYNAMICS,                                // dynamics processing in power amp

        DISTORT_DYNTIME,                                // time constant of follower filter

        DISTORT_MVTRIM,

        DISTORT_FAT,

        DISTORT_DEFINITION,

        DISTORT_PREDYNAMICS,                        // dynamics processing in  preamp

        DISTORT_PREDYNTIME,                                // time constant of follower filter

        DISTORT_USEMATCHING,

        DISTORT_PICKATTACK,

        DISTORT_DYNPRES,

        DISTORT_DYNDEPTH,

        DISTORT_SUPPLYTYPE,                                // select AC or DC power supply

        DISTORY_LINEFREQ,                                // power supply frequency

        DISTORT_THUNK,

        DISTORT_TREMFREQ,

        DISTORT_TREMDEPTH,

#ifdef DEBUG_MODE

        DISTORT_SPARE1,

        DISTORT_SPARE2,

        DISTORT_NSPARE1,

        DISTORT_NSPARE2,

#endif

//        DISTORT_TRIM2,

//        DISTORT_WSHPF_RATIO,                        // ratio of max freq to min freq between triodes

//        DISTORT_CLIP1,                                        // first triode clip value

//        DISTORT_CLIP2,                                        // second triode clip value

//        DISTORT_FDBKGAIN,                                // power amp positive feedback

//        DISTORT_FDBKFREQ,                                // positive feedback center freq

//        DISTORT_FDBKQ,

//        DISTORT_CLIPTYPE1,

        DISTORT_END,

};

enum

{

        FILTER_TYPE,

        FILTER_FREQ,

        FILTER_Q,

        FILTER_GAIN,

        FILTER_LEVEL,

        FILTER_BAL,

        FILTER_BYPASSMODE,

        FILTER_ORDER,

        FILTER_BYPASS,

        FILTER_PANL,

        FILTER_PANR,

        FILTER_PHASE,

        FILTER_LOWCUT,

        FILTER_HICUT,

        FILTER_END,

};

enum

{

        REVERB_TYPE,

        REVERB_TIME,

        REVERB_HICUT,

        REVERB_HFRATIO,

        REVERB_DIFFUSION,                                // Amount of global feedback on comb filters        

        REVERB_SIZE,

        REVERB_REVERBDELAY,                                // additional delay for reverb tail

        REVERB_EARLYLEVEL,

        REVERB_REVERBLEVEL,

        REVERB_PREDELAY,

        REVERB_LOWCUT,

        REVERB_DEPTH,                                        // modulation depth

        REVERB_RATE,                                        // modulation freq

        REVERB_MIX,

        REVERB_LEVEL,

        REVERB_PAN,

        REVERB_BYPASSMODE,

        REVERB_GLOBALMIX,

        REVERB_GAIN,

        REVERB_DENSITY,

        REVERB_INPDIFF,                                        // Input to comb filters diffusion mix level

        REVERB_INDIFFTIME,                                // Diffuser time

        REVERB_BYPASS,

        REVERB_NUMSPRINGS,

        REVERB_TONE,                                        // for spring mode

        REVERB_WIDTH,

        REVERB_FREQ1,

        REVERB_FREQ2,

        REVERB_Q1,

        REVERB_Q2,

        REVERB_GAIN1,

        REVERB_GAIN2,

        REVERB_DRIVE,

        REVERB_LFTIME,

        REVERB_LFXOVER,

        REVERB_END,

};

enum

{

        DELAY_MODEL,

        DELAY_TYPE,

        DELAY_TIME,

        DELAY_RATIO,

        DELAY_FEED,

        DELAY_FEEDL,

        DELAY_FEEDR,

        DELAY_DELAYPAN,

        DELAY_SPREAD,

        DELAY_TEMPO,

        DELAY_LOCUT,

        DELAY_HICUT,

        DELAY_RATE1,

        DELAY_RATE2,

        DELAY_DEPTH1,

        DELAY_DEPTH2,

        DELAY_DRIVE,

        DELAY_MIX,

        DELAY_LEVEL,

        DELAY_PAN,

        DELAY_BYPASSMODE,

        DELAY_GLOBALMIX,

        DELAY_BYPASS,

        DELAY_GAIN,                                                // Input gain

        DELAY_LFO1TYPE,

        DELAY_LFO2TYPE,

        DELAY_TIMER,                                        // For dual mode

        DELAY_HOLD,

        DELAY_MSTRFDBK,                                        // For stereo and dual modes

        DELAY_TEMPOR,

        DELAY_FEEDLR,

        DELAY_FEEDRL,

        DELAY_LEVELL,

        DELAY_LEVELR,

        DELAY_PANL,

        DELAY_PANR,

        DELAY_LFO1PHASE,

        DELAY_LFO2PHASE,

        DELAY_SPLICETIME,

        DELAY_RUN,

        DELAY_MODE,                                                // trig restart

        DELAY_FILTORDER,                                // filter order

        DELAY_ATTEN,

        DELAY_THRESH,

        DELAY_RELEASE,

        DELAY_DIFFUSE,

        DELAY_DIFFTIME,

        DELAY_PHASEREV,

        DELAY_LFO1TARGET,

        DELAY_LFO2TARGET,

        DELAY_LFO1TEMPO,

        DELAY_LFO2TEMPO,

        DELAY_RATE3,

        DELAY_LFO3TYPE,

        DELAY_LFO3PHASE,

        DELAY_LFO3TEMPO,

        DELAY_FSTART,

        DELAY_FSTOP,

        DELAY_Q,                                                // sweep delay filter Q

        DELAY_FILTERQ,                                        // filters Q

        DELAY_BITREDUCE,

        DELAY_FREQ1,

        DELAY_FREQ2,

        DELAY_Q1,

        DELAY_Q2,

        DELAY_GAIN1,

        DELAY_GAIN2,

        DELAY_MAXDEPTH,

        DELAY_SPEED,

        DELAY_OFFSET,

        DELAY_END,

};

enum

{

        LOOPER_MIX,

        LOOPER_LEVEL,

        LOOPER_PAN,

        LOOPER_BYPASSMODE,

        LOOPER_BYPASS,

        LOOPER_OVERDUBMIX,

        LOOPER_THRESH,

        LOOPER_THRESHLEV,

        LOOPER_MODE,

        LOOPER_QUANTIZE,

        LOOPER_STOP,

        LOOPER_START,

        LOOPER_PLAYIMMEDIATE,

        LOOPER_END,

        LOOPER_RECORD,                                         // control parameters, not stored with preset

        LOOPER_PLAY,

        LOOPER_ONCE,

        LOOPER_DUB,

        LOOPER_UNDO,

        LOOPER_REVERSE,

        LOOPER_HALFSPEED,

        LOOPER_END2,

};

enum

{

        ENHANCER_WIDTH,

        ENHANCER_DEPTH,

        ENHANCER_LOWCUT,

        ENHANCER_HICUT,

        ENHANCER_LEVEL,

        ENHANCER_BYPASS,

        ENHANCER_TYPE,

        ENHANCER_PHASE,

        ENHANCER_PANL,

        ENHANCER_PANR,

        ENHANCER_PAN,

        ENHANCER_END,

};

enum

{

        MULTITAP_TIME1,

        MULTITAP_TIME2,

        MULTITAP_TIME3,

        MULTITAP_TIME4,

        MULTITAP_TEMPO1,

        MULTITAP_TEMPO2,

        MULTITAP_TEMPO3,

        MULTITAP_TEMPO4,

        MULTITAP_LEVEL1,

        MULTITAP_LEVEL2,

        MULTITAP_LEVEL3,

        MULTITAP_LEVEL4,

        MULTITAP_FEEDBACK1,

        MULTITAP_FEEDBACK2,

        MULTITAP_FEEDBACK3,

        MULTITAP_FEEDBACK4,

        MULTITAP_PAN1,

        MULTITAP_PAN2,

        MULTITAP_PAN3,

        MULTITAP_PAN4,

        MULTITAP_RATE1,                                        // LFO rates

        MULTITAP_RATE2,

        MULTITAP_RATE3,

        MULTITAP_RATE4,

        MULTITAP_LFOTEMPO1,                                // LFO tempos

        MULTITAP_LFOTEMPO2,

        MULTITAP_LFOTEMPO3,

        MULTITAP_LFOTEMPO4,

        MULTITAP_MIX,

        MULTITAP_LEVEL,

        MULTITAP_PAN,

        MULTITAP_BYPASSMODE,

        MULTITAP_GLOBALMIX,

        MULTITAP_INGAIN,

        MULTITAP_BYPASS,

        MULTITAP_TYPE,

        MULTITAP_DECAY,                                        // t60 for plex mode

        MULTITAP_DIFFUSION,                                // feedback amount for plex types

        MULTITAP_DIFFMIX,                                // For diffuser (not the same as MULTITAP_DIFFUSION)

        MULTITAP_DIFFTIME,

        MULTITAP_THRESH,                                // ducker threshold

        MULTITAP_SPLICE,                                // Splice time for detuners

        MULTITAP_MSTRTIME,                                // Scales all delay times

        MULTITAP_MSTRLVL,                                // Master echo level

        MULTITAP_MSTRPAN,                                // Master echo pan

        MULTITAP_MSTRFREQ,                                // Master freq

        MULTITAP_MSTRQ,                                        // Master q

        MULTITAP_MSTRFDBK,

        MULTITAP_MSTRPITCH,                                // Scales all shifts for shifters

        MULTITAP_MSTRDTN,                                // Master detune, scales all detune values

        MULTITAP_DETUNE1,

        MULTITAP_DETUNE2,

        MULTITAP_DETUNE3,

        MULTITAP_DETUNE4,

        MULTITAP_SHIFT1,

        MULTITAP_SHIFT2,

        MULTITAP_SHIFT3,

        MULTITAP_SHIFT4,

        MULTITAP_FREQ1,                                        // For banddelays, set f0 of filters

        MULTITAP_FREQ2,

        MULTITAP_FREQ3,

        MULTITAP_FREQ4,

        MULTITAP_Q1,                                        // Sets Q for banddelay filters

        MULTITAP_Q2,

        MULTITAP_Q3,

        MULTITAP_Q4,

        MULTITAP_MSTRRATE,                                // Master LFO rate

        MULTITAP_ATTEN,                                        // ducker attenuation

        MULTITAP_MSTRDEPTH,                                // Master LFO depth

        MULTITAP_DIRECTION,                                // For shifter

        MULTITAP_SPEED,

        MULTITAP_DEPTH1,                                // LFO depths

        MULTITAP_DEPTH2,

        MULTITAP_DEPTH3,

        MULTITAP_DEPTH4,

        MULTITAP_LFOLOCK,                                // locks all lfo's to lfo1

        MULTITAP_FBKSEND,                                // feedback send point for quad-series delay

        MULTITAP_FBKRET,                                // feedback return point

        MULTITAP_STEREO,                                // mono / stereo

        MULTITAP_TIMEM,                                        // time between taps in straight mode

        MULTITAP_SUBDIV,                                // basic subdivision (1/8th note, 1/4 note, etc)

        MULTITAP_QUANTIZE,                                // quantize tap times to subdivision

        MULTITAP_RDECAY,                                // tap decay in straight mode

        MULTITAP_DECAYSTYLE,                        // rhythm mode decay style, normal or stepped pattern

        MULTITAP_NUMTAPS,                                // number of taps

        MULTITAP_SHUFFLE,                                // add shuffle feel to repeats, every other repeat offset by this amount

        MULTITAP_RTEMPO,

        MULTITAP_SPREAD,                                // controls spread in stereo mode

        MULTITAP_PANSHAPE,                                // controls pan shape in mono mode

        MULTITAP_PANALPHA,

        MULTITAP_LOWCUT,

        MULTITAP_HIGHCUT,

        MULTITAP_OFFSET,

        MULTITAP_FEEDBACK,

        MULTITAP_TIME1M,

        MULTITAP_TIME2M,

        MULTITAP_TIME3M,

        MULTITAP_TIME4M,

        MULTITAP_TIME5M,

        MULTITAP_TIME6M,

        MULTITAP_TIME7M,

        MULTITAP_TIME8M,

        MULTITAP_TIME9M,

        MULTITAP_TIME10M,

        MULTITAP_RLEVEL1,

        MULTITAP_RLEVEL2,

        MULTITAP_RLEVEL3,

        MULTITAP_RLEVEL4,

        MULTITAP_RLEVEL5,

        MULTITAP_RLEVEL6,

        MULTITAP_RLEVEL7,

        MULTITAP_RLEVEL8,

        MULTITAP_RLEVEL9,

        MULTITAP_RLEVEL10,

        MULTITAP_REFTEMPO,                                // Tempo that was set during tap entry

        MULTITAP_TRACKTEMPO,                        // If true taps track tempo when quantize is true

        MULTITAP_RELEASE,                                // ducker release time

        MULTITAP_END,

};

enum

{

        CHORUS_TYPE,

        CHORUS_VOICES,

        CHORUS_RATE,

        CHORUS_TEMPO,

        CHORUS_DEPTH,

        CHORUS_HICUT,

        CHORUS_DELAYTIME,

        CHORUS_LFOPHASE,

        CHORUS_LFOTYPE,

        CHORUS_AUTO,

        CHORUS_MIX,

        CHORUS_LEVEL,

        CHORUS_PAN,

        CHORUS_BYPASSMODE,

        CHORUS_GLOBALMIX,

        CHORUS_BYPASS,

        CHORUS_PHASEREV,

        CHORUS_WIDTH,

        CHORUS_LF02RATE,

        CHORUS_LFO2DEPTH,

        CHORUS_DRIVE,

        CHORUS_LOWCUT,

        CHORUS_SPREAD,

        CHORUS_END,

};

enum

{

        FLANGER_TYPE,

        FLANGER_RATE,

        FLANGER_TEMPO,

        FLANGER_DEPTH,

        FLANGER_FEEDBACK,

        FLANGER_DELAYTIME,

        FLANGER_MANUAL,

        FLANGER_LFOPHASE,

        FLANGER_LFOTYPE,

        FLANGER_LFOFILTER,

        FLANGER_AUTO,

        FLANGER_MIX,

        FLANGER_LEVEL,

        FLANGER_PAN,

        FLANGER_BYPASSMODE,

        FLANGER_GLOBALMIX,

        FLANGER_BYPASS,

        FLANGER_PHASEREV,

        FLANGER_THRUZERO,

        FLANGER_HICUT,

        FLANGER_DRIVE,

        FLANGER_LOWCUT,

        FLANGER_SPREAD,

        FLANGER_END,

};

enum

{

        FORMANT_FSTART,

        FORMANT_FMID,

        FORMANT_FEND,

        FORMANT_Q,

        FORMANT_CTRL,

        FORMANT_MIX,

        FORMANT_LEVEL,

        FORMANT_PAN,

        FORMANT_BYPASSMODE,

        FORMANT_GLOBALMIX,

        FORMANT_SPARE,

        FORMANT_BYPASS,

        FORMANT_END,

};

enum

{

        GEQ_GAIN1,

        GEQ_GAIN2,

        GEQ_GAIN3,

        GEQ_GAIN4,

        GEQ_GAIN5,

        GEQ_GAIN6,

        GEQ_GAIN7,

        GEQ_GAIN8,

        GEQ_GAIN9,

        GEQ_GAIN10,

        GEQ_MIX,

        GEQ_LEVEL,

        GEQ_PAN,

        GEQ_BYPASSMODE,

        GEQ_GLOBALMIX,

        GEQ_SPARE1,

        GEQ_SPARE2,

        GEQ_SPARE3,

        GEQ_BYPASS,

        GEQ_END,

};

enum

{

        PEQ_FREQ1,

        PEQ_FREQ2,

        PEQ_FREQ3,

        PEQ_FREQ4,

        PEQ_FREQ5,

        PEQ_Q1,

        PEQ_Q2,

        PEQ_Q3,

        PEQ_Q4,

        PEQ_Q5,

        PEQ_GAIN1,

        PEQ_GAIN2,

        PEQ_GAIN3,

        PEQ_GAIN4,

        PEQ_GAIN5,

        PEQ_LFTYPE,

        PEQ_HFTYPE,

        PEQ_SPARE3,

        PEQ_MIX,

        PEQ_LEVEL,

        PEQ_PAN,

        PEQ_BYPASSMODE,

        PEQ_GLOBALMIX,

        PEQ_BYPASS,

        PEQ_END,

};

enum

{

        PHASER_TYPE,

        PHASER_ORDER,

        PHASER_RATE,

        PHASER_LFOTYPE,

        PHASER_TEMPO,

        PHASER_DEPTH,

        PHASER_FEEDBACK,

        PHASER_FSTART,

        PHASER_FSPAN,

        PHASER_LFOPHASE,

        PHASER_BIAS,

        PHASER_MIX,

        PHASER_LEVEL,

        PHASER_PAN,

        PHASER_BYPASSMODE,

        PHASER_GLOBALMIX,

        PHASER_BYPASS,

        PHASER_MODE,                                        // selects phaser or vibe mode

        PHASER_FBTAP,                                        // where to feedback to (0, 1)

        PHASER_TONE,

        PHASER_END,

};

enum

{

        NOISEGATE_THRESH,

        NOISEGATE_RATIO,

        NOISEGATE_RELEASE,

        NOISEGATE_ATTACK,

        NOISEGATE_Z,                                                // Match-Z is done in noisegate block

        NOISEGATE_END,

};

enum

{

        PITCH_TYPE,

        PITCH_PITCHMODE,                                // Whammy mode, 1 = down, 0 = up

        PITCH_CTRL,

        PITCH_UCTRL,

        PITCH_HARM1,

        PITCH_HARM2,

        PITCH_KEY,

        PITCH_SCALE,

        PITCH_MODE,

        PITCH_DETUNE1,

        PITCH_DETUNE2,

        PITCH_SHIFT1,

        PITCH_SHIFT2,

        PITCH_LEVEL1,

        PITCH_LEVEL2,

        PITCH_PAN1,

        PITCH_PAN2,

        PITCH_DELAY1,

        PITCH_DELAY2,

        PITCH_FEEDBACK1,

        PITCH_FEEDBACK2,

        PITCH_TRACKMODE,                                // select between algorithms

        PITCH_TRACKING,                                        // delay length for fixed

        PITCH_MIX,

        PITCH_LEVEL,

        PITCH_PAN,

        PITCH_BYPASSMODE,

        PITCH_GLOBALMIX,

        PITCH_GAIN,

        PITCH_BYPASS,

        PITCH_XFADE,

        PITCH_SPLICE1,                                        // splice length in seconds

        PITCH_SPLICE2,

        PITCH_DTEMPO1,                                        // delay time tempo

        PITCH_DTEMPO2,

        PITCH_STEMPO1,                                        // splice time tempo

        PITCH_STEMPO2,

        PITCH_FBTYPE,                                        // feedback type, dual, both, cross

        PITCH_DIRECTION,                                // pointer read direction

        PITCH_LPFREQ,

        PITCH_GLIDE,                                        // glide time between harmonies

        PITCH_MDELAY,                                        // Masters

        PITCH_MFDBK,

        PITCH_MPAN,

        PITCH_MLEVEL,

        PITCH_CUSTOMNOTES,                                // number of notes in custom scale

        PITCH_NOTE2,

        PITCH_NOTE3,

        PITCH_NOTE4,

        PITCH_NOTE5,

        PITCH_NOTE6,

        PITCH_NOTE7,

        PITCH_NOTE8,

        PITCH_CUSTOMSCALE1,                                // For custom shifter which scale for voice1

        PITCH_CUSTOMSCALE2,                                // For custom shifter which scale for voice2

        PITCH_NUMSTEPS,

        PITCH_NUMREPEATS,

        PITCH_ARPRUN,                                        // When true arpeggiator runs, when false resets

        PITCH_TEMPO,

        PITCH_STEP1,                                        // Arpeggiator stuff

        PITCH_STEP2,

        PITCH_STEP3,

        PITCH_STEP4,

        PITCH_STEP5,

        PITCH_STEP6,

        PITCH_STEP7,

        PITCH_STEP8,

        PITCH_STEP9,

        PITCH_STEP10,

        PITCH_STEP11,

        PITCH_STEP12,

        PITCH_STEP13,

        PITCH_STEP14,

        PITCH_STEP15,

        PITCH_STEP16,

        PITCH_AMPSHAPE,

        PITCH_AMPALPHA,

        PITCH_PANSHAPE,

        PITCH_PANALPHA,

        PITCH_TIME1,                                        // Delay times in detune mode

        PITCH_TIME2,

        PITCH_SOURCE,                                        // pitch source, 0 = global, 1 = local

        PITCH_INMODE,                                        // 0 = mono, 1 = stereo

        PITCH_LEARN,

        PITCH_HPFREQ,

        PITCH_END,

};

enum

{

        ROTARY_RATE,

        ROTARY_LFDEPTH,

        ROTARY_HFDEPTH,

        ROTARY_HFLEVEL,

        ROTARY_TEMPO,

        ROTARY_MIX,

        ROTARY_LEVEL,

        ROTARY_PAN,

        ROTARY_BYPASSMODE,

        ROTARY_GLOBALMIX,

        ROTARY_HFLENGTH,

        ROTARY_BYPASS,

        ROTARY_WIDTH,

        ROTARY_LOWRATE,                                        // relative to rate

        ROTARY_LOWTIME,                                        // time constants

        ROTARY_HIGHTIME,

        ROTARY_LFWIDTH,

        ROTARY_DRIVE,

        ROTARY_END,

};

enum

{

        TREMOLO_TYPE,

        TREMOLO_LFOTYPE,

        TREMOLO_RATE,

        TREMOLO_DEPTH,

        TREMOLO_DUTY,

        TREMOLO_TEMPO,

        TREMOLO_MIX,

        TREMOLO_LEVEL,

        TREMOLO_PAN,

        TREMOLO_BYPASSMODE,

        TREMOLO_GLOBALMIX,

        TREMOLO_PHASE,

        TREMOLO_WIDTH,

        TREMOLO_CENTER,

        TREMOLO_BYPASS,

        TREMOLO_END,

};

enum

{

        WAH_TYPE,

        WAH_FSTART,

        WAH_FSTOP,

        WAH_Q,

        WAH_TRACK,

        WAH_CONTROL,

        WAH_LEVEL,

        WAH_PAN,

        WAH_BYPASSMODE,

        WAH_MIX,                // "clean" mix

        WAH_DRIVE,

        WAH_TAPER,

        WAH_BYPASS,

        WAH_END,

        WAH_HPF,

        WAH_LPF,

        WAH_END2,

};

enum

{

        FUZZ_TYPE,

        FUZZ_DRIVE,

        FUZZ_TONE,

        FUZZ_LEVEL,

        FUZZ_MIX,

        FUZZ_BYPASSMODE,

        FUZZ_SLEW,

        FUZZ_BYPASS,

        FUZZ_LOCUT,

        FUZZ_HICUT,

        FUZZ_CLIPTYPE,

        FUZZ_BIAS,

        FUZZ_BASS,

        FUZZ_MID,

        FUZZ_MIDFREQ,

        FUZZ_TREBLE,

        FUZZ_BITREDUCE,

        FUZZ_INPUTSELECT,

        FUZZ_PAN,

        FUZZ_RESAMPLE,

        FUZZ_END,

};

enum

{

        MIXER_GAIN1,

        MIXER_GAIN2,

        MIXER_GAIN3,

        MIXER_GAIN4,

        MIXER_PAN1,

        MIXER_PAN2,

        MIXER_PAN3,

        MIXER_PAN4,

        MIXER_MASTER,

        MIXER_MODE,

        MIXER_END,

};

enum

{

        FDBKSEND_SENDLEVEL,

        FDBKSEND_OUTLEVEL,

        FDBKSEND_END,

};

enum

{

        FDBKRET_MIX,

        FDBKRET_LEVEL,

        FDBKRET_PAN,

        FDBKRET_BYPASSMODE,

        FDBKRET_GLOBALMIX,                        // Not used

        FDBKRET_BYPASS,

        FDBKRET_END,

};

enum

{

        SYNTH_TYPE1,

        SYNTH_FREQ1,

        SYNTH_TRACK1,                                // 1 = on = track input freq

        SYNTH_SHIFT1,                                // Pitch shift amount in semi-tones

        SYNTH_DETUNE1,

        SYNTH_DUTY1,

        SYNTH_LEVEL1,

        SYNTH_PAN1,

        SYNTH_ATTACK1,

        SYNTH_HICUT1,

        SYNTH_Q1,

        SYNTH_TYPE2,

        SYNTH_FREQ2,

        SYNTH_TRACK2,

        SYNTH_SHIFT2,

        SYNTH_DETUNE2,

        SYNTH_DUTY2,

        SYNTH_LEVEL2,

        SYNTH_PAN2,

        SYNTH_ATTACK2,

        SYNTH_HICUT2,

        SYNTH_Q2,

        SYNTH_SPARE1,

        SYNTH_MIX,

        SYNTH_LEVEL,

        SYNTH_PAN,

        SYNTH_BYPASSMODE,

        SYNTH_GLOBALMIX,

        SYNTH_BYPASS,

        SYNTH_TYPE3,

        SYNTH_FREQ3,

        SYNTH_TRACK3,

        SYNTH_SHIFT3,

        SYNTH_DETUNE3,

        SYNTH_DUTY3,

        SYNTH_LEVEL3,

        SYNTH_PAN3,

        SYNTH_ATTACK3,

        SYNTH_HICUT3,

        SYNTH_Q3,

        SYNTH_END,

};

enum

{

        VOCODER_INSOURCE,                        // Selects L/R as carrier channel

        VOCODER_NUMBANDS,

        VOCODER_FREQSTART,                        // frequency of lowest filter

        VOCODER_FREQSTOP,                        // frequency of highest filter

        VOCODER_CSHIFT,                                // shifts freqs of carrier (synthesis) filters

        VOCODER_FREEZE,

        VOCODER_MASTERLVL,

        VOCODER_MASTERPAN,

        VOCODER_RES,                                // Increases or decreases Q of synthesis filters from optimum value

        VOCODER_ATTACK,

        VOCODER_RELEASE,

        VOCODER_HPMIX,

        VOCODER_MIX,

        VOCODER_LEVEL,

        VOCODER_PAN,

        VOCODER_BYPASSMODE,

        VOCODER_GLOBALMIX,

        VOCODER_LEVEL1,

        VOCODER_LEVEL2,

        VOCODER_LEVEL3,

        VOCODER_LEVEL4,

        VOCODER_LEVEL5,

        VOCODER_LEVEL6,

        VOCODER_LEVEL7,

        VOCODER_LEVEL8,

        VOCODER_LEVEL9,

        VOCODER_LEVEL10,

        VOCODER_LEVEL11,

        VOCODER_LEVEL12,

        VOCODER_LEVEL13,

        VOCODER_LEVEL14,

        VOCODER_LEVEL15,

        VOCODER_LEVEL16,

        VOCODER_PAN1,

        VOCODER_PAN2,

        VOCODER_PAN3,

        VOCODER_PAN4,

        VOCODER_PAN5,

        VOCODER_PAN6,

        VOCODER_PAN7,

        VOCODER_PAN8,

        VOCODER_PAN9,

        VOCODER_PAN10,

        VOCODER_PAN11,

        VOCODER_PAN12,

        VOCODER_PAN13,

        VOCODER_PAN14,

        VOCODER_PAN15,

        VOCODER_PAN16,

        VOCODER_BYPASS,

        VOCODER_END,

};

enum

{

        MEGATAP_INGAIN,

        MEGATAP_MASTERLVL,

        MEGATAP_TIME,

        MEGATAP_NUMTAPS,

        MEGATAP_TIMESHAPE,

        MEGATAP_TIMEALPHA,

        MEGATAP_AMPSHAPE,

        MEGATAP_AMPALPHA,

        MEGATAP_PANSHAPE,

        MEGATAP_PANALPHA,

        MEGATAP_RANDOM,

        MEGATAP_MIX,

        MEGATAP_LEVEL,

        MEGATAP_PAN,

        MEGATAP_BYPASSMODE,

        MEGATAP_GLOBALMIX,

        MEGATAP_BYPASS,

        MEGATAP_END,

};

enum

{

        CROSSOVER_FREQ,

        CROSSOVER_FREQRANGE,

        CROSSOVER_LOWGAINL,

        CROSSOVER_HIGAINL,

        CROSSOVER_LOWGAINR,

        CROSSOVER_HIGAINR,

        CROSSOVER_LOWPANL,

        CROSSOVER_HIPANL,

        CROSSOVER_LOWPANR,

        CROSSOVER_HIPANR,

        CROSSOVER_MIX,

        CROSSOVER_LEVEL,

        CROSSOVER_PAN,

        CROSSOVER_BYPASSMODE,

        CROSSOVER_BYPASS,

        CROSSOVER_END,

};

enum

{

        GATE_THRESH,

        GATE_ATTACK,

        GATE_HOLD,

        GATE_RELEASE,

        GATE_RATIO,

        GATE_KEY,

        GATE_LOWCUT,

        GATE_HICUT,

        GATE_MIX,

        GATE_LEVEL,

        GATE_PAN,

        GATE_BYPASSMODE,

        GATE_BYPASS,

        GATE_END,

};

enum

{

        RINGMOD_COARSE,

        RINGMOD_FINE,

        RINGMOD_TRACK,

        RINGMOD_HICUT,

        RINGMOD_MIX,

        RINGMOD_LEVEL,

        RINGMOD_PAN,

        RINGMOD_BYPASSMODE,

        RINGMOD_GLOBALMIX,

        RINGMOD_BYPASS,

        RINGMOD_END,

};

enum

{

        MULTICOMP_FREQ1,

        MULTICOMP_FREQ2,

        MULTICOMP_THRESH1,

        MULTICOMP_RATIO1,

        MULTICOMP_ATTACK1,

        MULTICOMP_RELEASE1,

        MULTICOMP_LEVEL1,

        MULTICOMP_DETECT1,                                // peak or rms

        MULTICOMP_MUTE1,                                // Normal, solo, mute

        MULTICOMP_THRESH2,

        MULTICOMP_RATIO2,

        MULTICOMP_ATTACK2,

        MULTICOMP_RELEASE2,

        MULTICOMP_LEVEL2,

        MULTICOMP_DETECT2,

        MULTICOMP_MUTE2,

        MULTICOMP_THRESH3,

        MULTICOMP_RATIO3,

        MULTICOMP_ATTACK3,

        MULTICOMP_RELEASE3,

        MULTICOMP_LEVEL3,

        MULTICOMP_DETECT3,

        MULTICOMP_MUTE3,

        MULTICOMP_MIX,

        MULTICOMP_LEVEL,

        MULTICOMP_PAN,

        MULTICOMP_BYPASSMODE,

        MULTICOMP_BYPASS,

        MULTICOMP_END,

};

enum

{

        QUADCHO_MASTERTIME,

        QUADCHO_MASTERLVL,

        QUADCHO_MASTERPAN,

        QUADCHO_MASTERRATE,

        QUADCHO_MASTERDEPTH,

        QUADCHO_MASTERFDBK,

        QUADCHO_TIME1,                                // pre-delay times

        QUADCHO_TIME2,

        QUADCHO_TIME3,

        QUADCHO_TIME4,

        QUADCHO_LEVEL1,

        QUADCHO_LEVEL2,

        QUADCHO_LEVEL3,

        QUADCHO_LEVEL4,

        QUADCHO_PAN1,

        QUADCHO_PAN2,

        QUADCHO_PAN3,

        QUADCHO_PAN4,

        QUADCHO_DEPTH1,

        QUADCHO_DEPTH2,

        QUADCHO_DEPTH3,

        QUADCHO_DEPTH4,

        QUADCHO_MORPH1,                                // morphs between the four lfo's for each delay line

        QUADCHO_MORPH2,

        QUADCHO_MORPH3,

        QUADCHO_MORPH4,

        QUADCHO_TYPE1,                                // LFO types

        QUADCHO_TYPE2,

        QUADCHO_TYPE3,

        QUADCHO_TYPE4,

        QUADCHO_RATE1,                                // LFO rate multipliers

        QUADCHO_RATE2,

        QUADCHO_RATE3,

        QUADCHO_RATE4,

        QUADCHO_MDEPTH,                                // Depth of main LFO (LFO 4)

        QUADCHO_MODE,

        QUADCHO_LFOLOCK,                        // Lock lfo's 2 and 3 to 1

        QUADCHO_WIDE,

        QUADCHO_PHASE,                                // Phase difference for main LFO

        QUADCHO_MIX,

        QUADCHO_LEVEL,

        QUADCHO_PAN,

        QUADCHO_BYPASSMODE,

        QUADCHO_GLOBALMIX,

        QUADCHO_BYPASS,

        QUADCHO_HICUT,

        QUADCHO_END,

};

enum

{

        RESONATOR_MODE,

        RESONATOR_CHORD,

        RESONATOR_INGAIN,

        RESONATOR_FREQ,                                // Frequency for chord mode

        RESONATOR_MASTERFREQ,

        RESONATOR_MASTERLVL,

        RESONATOR_MASTERPAN,

        RESONATOR_MASTERFDBK,

        RESONATOR_MASTERQ,

        RESONATOR_FREQ1,

        RESONATOR_FREQ2,

        RESONATOR_FREQ3,

        RESONATOR_FREQ4,

        RESONATOR_FDBK1,

        RESONATOR_FDBK2,

        RESONATOR_FDBK3,

        RESONATOR_FDBK4,

        RESONATOR_LOC1,

        RESONATOR_LOC2,

        RESONATOR_LOC3,

        RESONATOR_LOC4,

        RESONATOR_Q1,

        RESONATOR_Q2,

        RESONATOR_Q3,

        RESONATOR_Q4,

        RESONATOR_LEVEL1,

        RESONATOR_LEVEL2,

        RESONATOR_LEVEL3,

        RESONATOR_LEVEL4,

        RESONATOR_PAN1,

        RESONATOR_PAN2,

        RESONATOR_PAN3,

        RESONATOR_PAN4,

        RESONATOR_MIX,

        RESONATOR_LEVEL,

        RESONATOR_PAN,

        RESONATOR_BYPASSMODE,

        RESONATOR_GLOBALMIX,

        RESONATOR_BYPASS,

        RESONATOR_INPUTMODE,

        RESONATOR_END,

};

enum

{

        VOLUME_GAIN,

        VOLUME_BAL,

        VOLUME_TAPER,

        VOLUME_BYPASS,

        VOLUME_PANL,

        VOLUME_PANR,

        VOLUME_LEVEL,

        VOLUME_BYPASSMODE,

        VOLUME_INPUTSELECT,

        VOLUME_END,

};

enum

{

        B_SKIP,                // don't call setParam()

        B_INT,

        B_INTXL,        // accelerate

        B_LIN,

        B_LOG,

        B_LOGLOG,

        B_MIX,

        B_LEVEL,

        B_PAN,

        B_BYP1,

        B_BYP2,

        B_BYP3,

        B_GMIX,

        B_DUMMY,        // don't call setParam() but report range to editor

};

enum

{

        B_NONE,

        B_DB,

        B_HZ,

        B_SEC,

        B_MSEC,

        B_PRC,

        B_DEG,

        B_CENTS,

};

typedef struct

{

        int offset;                                // offset of member value

        int type;                                // value type OR'd with unit type: linear, log, etc.

        float lowlimit;                        // min value

        float hilimit;                        // max value

        float mult;                                // display multiplier (value * mult = displayed)

        float res;                                // parameter resolution

        char **str;                                // for int types points to string pointers

} PARAMINFO;

// Similar to above but for SetMember...() stuff

typedef struct

{

        int offset;                                // offset of member value

        int type;                                // value type OR'd with unit type: linear, log, etc.

        float lowlimit;                        // min value

        float hilimit;                        // max value

} MEMBERINFO;

// The data type, unit string and precision are combined into one word

// to save memory.  B_xxxxx is the base value.  The base value is left

// shifted in the structure.

#define SKIP (B_SKIP << 4)

#define INT (B_INT << 4)

#define INTXL (B_INTXL << 4)

#define LIN (B_LIN << 4)

#define LOG (B_LOG << 4)

#define LOGLOG (B_LOGLOG << 4)

#define MIX (B_MIX << 4)

#define LEVEL (B_LEVEL << 4)

#define PAN (B_PAN << 4)

#define BYP1 (B_BYP1 << 4)

#define BYP2 (B_BYP2 << 4)

#define BYP3 (B_BYP3 << 4)

#define GMIX (B_GMIX << 4)

#define DUMMY (B_DUMMY << 4)

#define NONE (B_NONE << 8)

#define DB (B_DB << 8)

#define HZ (B_HZ << 8)

#define SEC (B_SEC << 8)

#define MSEC (B_MSEC << 8)

#define PRC (B_PRC << 8)

#define DEG (B_DEG << 8)

#define CENTS (B_CENTS << 8)