Difference between revisions of "Axe-Fx SysEx Documentation"

From Fractal Audio Wiki
Jump to navigation Jump to search
m
Line 50: Line 50:
  
  
 +
 +
Here's the existing Axe-Fx sysex message spec:
 +
 +
'''Axe-Fx MIDI Remote Programming'''
 +
 +
'''1.0 Introduction'''
 +
 +
The Axe-Fx allows remote programming via it's MIDI interface. To utilize this
 +
feature the remote programmer (PC) is connected to the Axe-Fx MIDI in and out
 +
jacks. Commands are sent to the MIDI in and replies are returned from MIDI out.
 +
 +
There are only two basic objects in the Axe-Fx: effects and modifiers. Effects
 +
include all effect objects and modifiers are the transform between an internal
 +
or external controller and an effect parameter. All effects have a unique
 +
effect ID and all modifiers have a unique ID.
 +
 +
All parameters in the Axe-Fx are stored as 8-bit values with a range of 0 to
 +
254 (255 not used). Axe-Fx parameters fall into 3 different types: integer,
 +
linear and log. Integer parameters have a direct correspondence between the
 +
parameter value and the parameter itself.  Linear parameters have a linear
 +
relationship between the parameter value and the parameter itself. Log
 +
parameters have an exponential relationship between the parameter value and the
 +
parameter itself. Integer parameters typically have a limited range of
 +
allowable values.
 +
 +
 +
All MIDI functions have the same header as follows:
 +
 +
<tt>
 +
:0xF0  sysex start
 +
:0x00  Manf. ID byte0
 +
:0x00  Manf. ID byte1
 +
:0x7d  Manf. ID byte2 (this value is configurable within the Axe-Fx)
 +
:0x00  Model #
 +
:0xdd  Function ID</tt>
 +
 +
Byte2 of the manufacturers ID is configurable in the Axe-Fx on the MIDI menu.
 +
This value should match or the Axe-Fx may reject the message.  The function ID
 +
indicates the type of function and sets the formatting of the data to follow.
 +
 +
 +
'''2.0 MIDI Send Messages'''
 +
 +
These messages are sent to the Axe-Fx to carry out an action.
 +
 +
The following functions are available:
 +
 +
 +
<nowiki>*******************************************************************************</nowiki>
 +
 +
'''MIDI_SET_PARAMETER'''
 +
 +
This function sets or queries an effect parameter.
 +
 +
Format:
 +
<tt>
 +
:0xF0  sysex start
 +
:0x00  Manf. ID byte0
 +
:0x00  Manf. ID byte1
 +
:0x7d  Manf. ID byte2 (this value is configurable within the Axe-Fx)
 +
:0x00  Model #
 +
:0x02  Function ID
 +
:0xdd  effect ID LS nibble
 +
:0xdd  effect ID MS nibble
 +
:0xdd  parameter ID LS nibble
 +
:0xdd  parameter ID MS nibble
 +
:0xdd  parameter value LS nibble
 +
:0xdd  parameter value MS nibble
 +
:0xdd  query(0) or set(1) value
 +
:0xF7  sysex end</tt>
 +
 +
The effect identified by the effect ID has its parameter identified by the
 +
parameter ID set to a value of between 0 and 254. You can query the current
 +
value by setting or clearing the set byte.
 +
 +
Rather than trying to keep track of the range of all parameters and their types
 +
this MIDI function operates as a virtual interface. After calling
 +
MIDI_SET_PARAM the Axe-Fx responds with the actual parameter value and a string
 +
representation of the parameter.
 +
 +
For example, if setting a rate parameter the Axe-Fx will respond with the
 +
parameter value (0 - 254) and a string representing the actual value of the
 +
rate, i.e. "1.234 Hz".
 +
 +
The value response allows querying a parameter and also does range checking on
 +
integer types. If one attempts to set an integer type outside of its range the
 +
Axe-Fx will set the value to the minimum or maximum value allowable and respond
 +
with the actual value set.
 +
 +
Values can be queried by simply setting the set/query byte to 0. The parameter
 +
value is irrelevant. The Axe-Fx will then respond with the current value and
 +
string representation.
 +
 +
When first editing an effect all the parameters should be queried to determine
 +
their current values. To then edit a parameter simply send the new parameter
 +
value and await the response.
 +
 +
 +
<nowiki>*******************************************************************************</nowiki>
 +
 +
'''MIDI_SET_MODIFIER'''
 +
 +
This function sets or queries a modifier parameter.
 +
 +
Message format:
 +
<tt>
 +
:0xF0  sysex start
 +
:0x00  Manf. ID byte0
 +
:0x00  Manf. ID byte1
 +
:0x7d  Manf. ID byte2 (this value is configurable within the Axe-Fx)
 +
:0x00  Model #
 +
:0x07  Function ID
 +
:0xdd  effect ID LS nibble
 +
:0xdd  effect ID MS nibble
 +
:0xdd  parameter ID LS nibble
 +
:0xdd  parameter ID MS nibble
 +
:0xdd  modifier parameter ID LS nibble
 +
:0xdd  modifier parameter ID MS nibble
 +
:0xdd  modifier value LS nibble
 +
:0xdd  modifier value MS nibble
 +
:0xdd  query(0) or set(1) value
 +
:0xF7  sysex end</tt>
 +
 +
 +
This function sets the value of a modifier parameter. The modifier parameter
 +
identified by its ID has its value set to the modifier value. The effect being
 +
controlled and the parameter being controlled are indicated by the effect and
 +
parameter ID's. Note that the effect parameter ID will be different than the
 +
basic parameter ID. For example, a rate control may have a parameter ID = 3. To
 +
control it in real-time via a modifier the corresponding parameter ID will be
 +
different. Modifiable parameters have a corresponding parameter with an ID
 +
greater than or equal to 100.
 +
 +
There are 16 modifiers available in the Axe-Fx, meaning that up to 16
 +
parameters can be controlled at one time. A modifier is connected to a
 +
parameter when the modifier control ID is nonzero.  To connect a modifier to a
 +
parameter call this function with the desired effect ID and parameter ID with
 +
the modifier parameter equal to MOD_CTRTLID and a modifier value equal to the
 +
desired controller. A non-zero value will automatically connect the modifier. A
 +
value of zero will disconnect the modifier.
 +
 +
Once a modifier is connected the other parameters can be set or queried
 +
accordingly. Like the MIDI_SET_PARAMETER function this function responds with
 +
the value set and a text string representation of the actual value.
 +
 +
 +
<nowiki>*******************************************************************************</nowiki>
 +
 +
'''MIDI_PLACE_EFFECT'''
 +
 +
Places an effect at a position in the effects grid.
 +
 +
Message format:
 +
<tt>
 +
:0xF0  sysex start
 +
:0x00  Manf. ID byte0
 +
:0x00  Manf. ID byte1
 +
:0x7d  Manf. ID byte2 (this value is configurable within the Axe-Fx)
 +
:0x00  Model #
 +
:0x05  Function ID
 +
:0xdd  effect ID LS nibble
 +
:0xdd  effect ID MS nibble
 +
:0xdd  grid position
 +
:0xdd  query(0) or set(1) value
 +
:0xF7  sysex end</tt>
 +
 +
 +
The effect identified by its ID is placed at a position in the grid. The grid
 +
is 4 rows by 12 columns. A grid position is given by position = 4 *
 +
column_number + row_number. Rows and columns are enumerated starting with zero.
 +
 +
If another effect is at the position it is removed.
 +
 +
 +
<nowiki>*******************************************************************************</nowiki>
 +
 +
'''MIDI_CONNECT_EFFECT'''
 +
 +
Connects two effects.
 +
 +
Message format:
 +
<tt>
 +
:0xF0  sysex start
 +
:0x00  Manf. ID byte0
 +
:0x00  Manf. ID byte1
 +
:0x7d  Manf. ID byte2 (this value is configurable within the Axe-Fx)
 +
:0x00  Model #
 +
:0x06  Function ID
 +
:0xdd  source position
 +
:0xdd  destination position
 +
:0xdd  connect (1) | disconnect (0)</tt>
 +
 +
The effect at the source position is connected or disconnected to/from the
 +
effect at the destination position. The position is as described above. A null
 +
block cannot be one of the two effects being connected and will result in the
 +
function failing.
 +
 +
 +
 +
 +
'''3.0 MIDI Return Messages'''
 +
 +
Upon sending a message to the Axe-Fx it will return a message. The following
 +
return messages are implemented:
 +
 +
 +
<nowiki>*******************************************************************************</nowiki>
 +
 +
'''MIDI_PARAM_VALUE'''
 +
 +
Message format:
 +
<tt>
 +
:0xF0  sysex start
 +
:0x00  Manf. ID byte0
 +
:0x00  Manf. ID byte1
 +
:0x7d  Manf. ID byte2 (this value is configurable within the Axe-Fx)
 +
:0x00  Model #
 +
:0x02  Function ID (2)
 +
:0xdd  effect ID LS nibble
 +
:0xdd  effect ID MS nibble
 +
:0xdd  parameter ID LS nibble
 +
:0xdd  parameter ID MS nibble
 +
:0xdd  parameter value LS nibble
 +
:0xdd  parameter value MS nibble
 +
:0xdd  null-terminated string byte0
 +
:0xdd  byte1
 +
:...
 +
:0x00  null character
 +
:0xF7  sysex end</tt>
 +
 +
 +
This message is returned after sending the MIDI_SET_PARAMETER message.
 +
 +
<nowiki>*******************************************************************************</nowiki>
 +
 +
'''MIDI_MODIFIER_VALUE'''
 +
 +
Message format:
 +
<tt>
 +
:0xF0  sysex start
 +
:0x00  Manf. ID byte0
 +
:0x00  Manf. ID byte1
 +
:0x7d  Manf. ID byte2 (this value is configurable within the Axe-Fx)
 +
:0x00  Model #
 +
:0x07  Function ID (7)
 +
:0xdd  effect ID LS nibble
 +
:0xdd  effect ID MS nibble
 +
:0xdd  parameter ID LS nibble
 +
:0xdd  parameter ID MS nibble
 +
:0xdd  modifier parameter ID LS nibble
 +
:0xdd  modifier parameter ID MS nibble
 +
:0xdd  modifier value LS nibble
 +
:0xdd  modifier value MS nibble
 +
:0xdd  null-terminated string byte0
 +
:0xdd  byte1
 +
:...
 +
:0x00  null character
 +
:0xF7  sysex end</tt>
 +
 +
 +
This message is returned after sending the MIDI_SET_MODIFIER message.
 +
 +
 +
<nowiki>*******************************************************************************</nowiki>
 +
 +
'''MIDI_STATUS'''
 +
 +
Reports success or failure.
 +
 +
Message format:
 +
<tt>
 +
:0xF0  sysex start
 +
:0x00  Manf. ID byte0
 +
:0x00  Manf. ID byte1
 +
:0x7d  Manf. ID byte2 (this value is configurable within the Axe-Fx)
 +
:0x00  Model #
 +
:0xdd  Calling Function ID
 +
:0xdd  status
 +
:0xF7  sysex end</tt>
 +
 +
All other function calls respond with this message.  The calling function ID is
 +
indicated and success (1) or failure (0) indicated in the status byte.
  
 
==Firmware Revision 8.02==
 
==Firmware Revision 8.02==

Revision as of 18:17, 20 August 2009

Axe-Fx System Exclusive Message Table

This is a user-driven project to document the SysEx messages used by the Axe-Fx. For a list of controllers capable of sending (and possible receiving) SysEx information to your Axe-Fx please see [SysEx Capable Controllers].

Disclaimer

Use of the SysEx messages to access your Axe-Fx is not supported by Fractal Audio. You use these messages at your own risk.

The SysEx messages are copyright Fractal Audio and are printed here with the permission of Fractal Audio.

When in doubt: ask questions in the forum before using this stuff.

General SysEx Message Overview

(Attempting to describe the general format of the SysEx messages used by the Axe-Fx here. Please expand this!)

A sample Axe-Fx SysEx message:

Message: F0  00  00  7D  01  02 0A 06 00 00 01 00 01  F7
Block:   1   2   3   4   5  (--------- data --------) 7
SysEx Message Blocks Described
Block Description
1 SysEx Start byte. From the GM spec. Indicates the start of a MIDI SysEx message.
2 Unknown
3 Unknown
4 SysEx ID. If you're sending message this should be set to the SysEx ID of your Axe-Fx.
5 Unknown
data The data portion of the SysEx message. You construct this portion using the tables below. The first two bytes are used to indicate the effect block or feature on the Axe-Fx being accessed.
7 SysEx End byte.


Here's the existing Axe-Fx sysex message spec:

Axe-Fx MIDI Remote Programming

1.0 Introduction

The Axe-Fx allows remote programming via it's MIDI interface. To utilize this feature the remote programmer (PC) is connected to the Axe-Fx MIDI in and out jacks. Commands are sent to the MIDI in and replies are returned from MIDI out.

There are only two basic objects in the Axe-Fx: effects and modifiers. Effects include all effect objects and modifiers are the transform between an internal or external controller and an effect parameter. All effects have a unique effect ID and all modifiers have a unique ID.

All parameters in the Axe-Fx are stored as 8-bit values with a range of 0 to 254 (255 not used). Axe-Fx parameters fall into 3 different types: integer, linear and log. Integer parameters have a direct correspondence between the parameter value and the parameter itself. Linear parameters have a linear relationship between the parameter value and the parameter itself. Log parameters have an exponential relationship between the parameter value and the parameter itself. Integer parameters typically have a limited range of allowable values.


All MIDI functions have the same header as follows:

0xF0 sysex start
0x00 Manf. ID byte0
0x00 Manf. ID byte1
0x7d Manf. ID byte2 (this value is configurable within the Axe-Fx)
0x00 Model #
0xdd Function ID

Byte2 of the manufacturers ID is configurable in the Axe-Fx on the MIDI menu. This value should match or the Axe-Fx may reject the message. The function ID indicates the type of function and sets the formatting of the data to follow.


2.0 MIDI Send Messages

These messages are sent to the Axe-Fx to carry out an action.

The following functions are available:


*******************************************************************************

MIDI_SET_PARAMETER

This function sets or queries an effect parameter.

Format:

0xF0 sysex start
0x00 Manf. ID byte0
0x00 Manf. ID byte1
0x7d Manf. ID byte2 (this value is configurable within the Axe-Fx)
0x00 Model #
0x02 Function ID
0xdd effect ID LS nibble
0xdd effect ID MS nibble
0xdd parameter ID LS nibble
0xdd parameter ID MS nibble
0xdd parameter value LS nibble
0xdd parameter value MS nibble
0xdd query(0) or set(1) value
0xF7 sysex end

The effect identified by the effect ID has its parameter identified by the parameter ID set to a value of between 0 and 254. You can query the current value by setting or clearing the set byte.

Rather than trying to keep track of the range of all parameters and their types this MIDI function operates as a virtual interface. After calling MIDI_SET_PARAM the Axe-Fx responds with the actual parameter value and a string representation of the parameter.

For example, if setting a rate parameter the Axe-Fx will respond with the parameter value (0 - 254) and a string representing the actual value of the rate, i.e. "1.234 Hz".

The value response allows querying a parameter and also does range checking on integer types. If one attempts to set an integer type outside of its range the Axe-Fx will set the value to the minimum or maximum value allowable and respond with the actual value set.

Values can be queried by simply setting the set/query byte to 0. The parameter value is irrelevant. The Axe-Fx will then respond with the current value and string representation.

When first editing an effect all the parameters should be queried to determine their current values. To then edit a parameter simply send the new parameter value and await the response.


*******************************************************************************

MIDI_SET_MODIFIER

This function sets or queries a modifier parameter.

Message format:

0xF0 sysex start
0x00 Manf. ID byte0
0x00 Manf. ID byte1
0x7d Manf. ID byte2 (this value is configurable within the Axe-Fx)
0x00 Model #
0x07 Function ID
0xdd effect ID LS nibble
0xdd effect ID MS nibble
0xdd parameter ID LS nibble
0xdd parameter ID MS nibble
0xdd modifier parameter ID LS nibble
0xdd modifier parameter ID MS nibble
0xdd modifier value LS nibble
0xdd modifier value MS nibble
0xdd query(0) or set(1) value
0xF7 sysex end


This function sets the value of a modifier parameter. The modifier parameter identified by its ID has its value set to the modifier value. The effect being controlled and the parameter being controlled are indicated by the effect and parameter ID's. Note that the effect parameter ID will be different than the basic parameter ID. For example, a rate control may have a parameter ID = 3. To control it in real-time via a modifier the corresponding parameter ID will be different. Modifiable parameters have a corresponding parameter with an ID greater than or equal to 100.

There are 16 modifiers available in the Axe-Fx, meaning that up to 16 parameters can be controlled at one time. A modifier is connected to a parameter when the modifier control ID is nonzero. To connect a modifier to a parameter call this function with the desired effect ID and parameter ID with the modifier parameter equal to MOD_CTRTLID and a modifier value equal to the desired controller. A non-zero value will automatically connect the modifier. A value of zero will disconnect the modifier.

Once a modifier is connected the other parameters can be set or queried accordingly. Like the MIDI_SET_PARAMETER function this function responds with the value set and a text string representation of the actual value.


*******************************************************************************

MIDI_PLACE_EFFECT

Places an effect at a position in the effects grid.

Message format:

0xF0 sysex start
0x00 Manf. ID byte0
0x00 Manf. ID byte1
0x7d Manf. ID byte2 (this value is configurable within the Axe-Fx)
0x00 Model #
0x05 Function ID
0xdd effect ID LS nibble
0xdd effect ID MS nibble
0xdd grid position
0xdd query(0) or set(1) value
0xF7 sysex end


The effect identified by its ID is placed at a position in the grid. The grid is 4 rows by 12 columns. A grid position is given by position = 4 * column_number + row_number. Rows and columns are enumerated starting with zero.

If another effect is at the position it is removed.


*******************************************************************************

MIDI_CONNECT_EFFECT

Connects two effects.

Message format:

0xF0 sysex start
0x00 Manf. ID byte0
0x00 Manf. ID byte1
0x7d Manf. ID byte2 (this value is configurable within the Axe-Fx)
0x00 Model #
0x06 Function ID
0xdd source position
0xdd destination position
0xdd connect (1) | disconnect (0)

The effect at the source position is connected or disconnected to/from the effect at the destination position. The position is as described above. A null block cannot be one of the two effects being connected and will result in the function failing.



3.0 MIDI Return Messages

Upon sending a message to the Axe-Fx it will return a message. The following return messages are implemented:


*******************************************************************************

MIDI_PARAM_VALUE

Message format:

0xF0 sysex start
0x00 Manf. ID byte0
0x00 Manf. ID byte1
0x7d Manf. ID byte2 (this value is configurable within the Axe-Fx)
0x00 Model #
0x02 Function ID (2)
0xdd effect ID LS nibble
0xdd effect ID MS nibble
0xdd parameter ID LS nibble
0xdd parameter ID MS nibble
0xdd parameter value LS nibble
0xdd parameter value MS nibble
0xdd null-terminated string byte0
0xdd byte1
...
0x00 null character
0xF7 sysex end


This message is returned after sending the MIDI_SET_PARAMETER message.

*******************************************************************************

MIDI_MODIFIER_VALUE

Message format:

0xF0 sysex start
0x00 Manf. ID byte0
0x00 Manf. ID byte1
0x7d Manf. ID byte2 (this value is configurable within the Axe-Fx)
0x00 Model #
0x07 Function ID (7)
0xdd effect ID LS nibble
0xdd effect ID MS nibble
0xdd parameter ID LS nibble
0xdd parameter ID MS nibble
0xdd modifier parameter ID LS nibble
0xdd modifier parameter ID MS nibble
0xdd modifier value LS nibble
0xdd modifier value MS nibble
0xdd null-terminated string byte0
0xdd byte1
...
0x00 null character
0xF7 sysex end


This message is returned after sending the MIDI_SET_MODIFIER message.


*******************************************************************************

MIDI_STATUS

Reports success or failure.

Message format:

0xF0 sysex start
0x00 Manf. ID byte0
0x00 Manf. ID byte1
0x7d Manf. ID byte2 (this value is configurable within the Axe-Fx)
0x00 Model #
0xdd Calling Function ID
0xdd status
0xF7 sysex end

All other function calls respond with this message. The calling function ID is indicated and success (1) or failure (0) indicated in the status byte.

Firmware Revision 8.02

Common

Ultra-Only