|
|
(217 intermediate revisions by 11 users not shown) |
Line 1: |
Line 1: |
− | ==About MIDI System Exclusive (SysEx) messages== | + | __TOC__ |
− | * If you're a MIDI expert, you can use SysEx messages (MIDI System Exclusive) to control the Axe-Fx II.
| + | =System Exclusive messages= |
− | * To learn more about MIDI, [http://en.wikipedia.org/wiki/MIDI see the article in Wikipedia]
| |
− | * To learn more about SysEx [http://electronicmusic.wikia.com/wiki/System_exclusive see this article in the Electronic Music Wiki].
| |
| | | |
− | ==SysEx messages for Ultra==
| + | If you're a MIDI expert, you can use SysEx messages (MIDI System Exclusive) to control Fractal Audio devices. |
− | * Ultra-specific SysEx information has been accurately acquired and organized by forum member GM Arts: [http://www.gmarts.org/html/axefx_ultra_sysex_1005.html here].
| |
− | * Information about SysEx commands for retrieving Preset/Effect bypass states is [http://forum.fractalaudio.com/other-midi-controllers/39161-using-sysex-recall-present-effect-bypass-status-info-available.html here].
| |
| | | |
− | ==SysEx messages for Axe Fx II==
| + | [http://electronicmusic.wikia.com/wiki/System_exclusive Learn more about SysEx] |
− | * Many Axe Fx II sysex messages are similar to Standard/Ultra messages documented [http://wiki.fractalaudio.com/index.php?title=Axe-Fx_SysEx_Documentation here].
| |
− | * Model ID is 3.
| |
− | * All messages must be sent with checksums.
| |
− | * Responses for some key messages are different. Information about SysEx commands for retrieving Preset names and Preset/Effect bypass states is [http://forum.fractalaudio.com/other-midi-controllers/44824-what-sysex-message-get_preset_name-axe2.html here].
| |
| | | |
− | * Complement to SysEx Messages:
| + | [http://forum.fractalaudio.com/threads/sysex-0x02-midi_get_parameter.123480/ Discussion about Fractal Audio's SysEx implementation] |
− | '''MIDI_SET_PRESET'''
| |
− | <tt>
| |
− | :Function number: 14
| |
− | :Exemple: F0 0 1 74 3 14 0 1 13 0 FF --> to set the current preset (edit buffer) to preset 0 (1 if DISPLAY OFFSET activated)
| |
− | : F0 0 1 74 3 14 1 0 13 0 FF --> to set the current preset (edit buffer) to preset 128 (129 if DISPLAY OFFSET activated)
| |
− | :Send from AXE-FX to AXE-EDIT and MFC-101
| |
− | </tt>
| |
| | | |
− | ==Calculating the SYSEX checksum for the Axe-FX II==
| + | Firmware Ares and later provides MIDI support for 3rd-party devices to set and/or get scene, channel, bypass, scene names, preset names, tuner data, tempo data, via System Exclusive messages. |
− | As mentioned above, the Axe-FX II units require a checksum to be added to the end of the SYSEX string that is sent to it (before the terminating F7 byte) as a verification step.
| |
| | | |
− | In order to calculate the checksum, you basically have to XOR every byte from the start of the SYSEX message, up to the character BEFORE the terminating F7 byte. For example, to send the following SYSEX message (to fetch a preset name):
| + | Read this: [http://www.fractalaudio.com/downloads/misc/Axe-Fx%20III%20MIDI%20for%203rd%20Party%20Devices.pdf Axe-Fx III MIDI for Third-Party Devices] |
| | | |
− | * F0 00 01 74 03 0F F7
| + | [[image:MIDI.png|link=]] |
| | | |
− | We would have to XOR all the byte values from the starting 'F0' to the '0F' which is the second last byte:
| + | =Axe-Fx Standard and Axe-Fx Ultra= |
| | | |
− | * 0xF0 ^ 0x00 ^ 0x01 ^ 0x74 ^ 0x03 ^ 0x0F = '''0x89'''
| + | [http://www.gmarts.org/html/axefx_ultra_sysex_1005.html Ultra-specific SysEx information from forum member GM Arts] |
| | | |
− | Then, we would need to strip the leftmost bit from the result (by ANDing it to 0x7F):
| + | [http://forum.fractalaudio.com/other-midi-controllers/39161-using-sysex-recall-present-effect-bypass-status-info-available.html SysEx commands for retrieving Preset/Effect bypass states] |
| | | |
− | * 0x89 && 0x7F = '''0x09'''
| + | =Axe-Fx II and AX8= |
| | | |
− | And, we add this byte (actually, a septet now) to the end of the SYSEX string, BEFORE the terminating F7:
| + | SysEx commands for control of the Axe-Fx II (all models) and AX8 are documented in this page: [https://wiki.fractalaudio.com/wiki/index.php?title=MIDI_SysEx_Functions_AxeFxII MIDI SysEx Functions for Axe-Fx II] |
| | | |
− | * F0 00 01 74 03 0F '''09''' F7
| + | =Axe-Fx III, FM9 and FM3= |
| | | |
− | Obviously, in a 'static' SYSEX message like above, you do not have to recalculate the checksum each time as it will always be '09' as the rest of the message does not change, but if you are sending a SYSEX string to change a parameter value etc. then you will have to calculate the checksum on the fly as byte values towards the end of the SYSEX string will be different each time.
| + | SysEx commands for control of the Axe-Fx III, FM9 and FM3 through third-party MIDI devices are documented in this guide: [http://www.fractalaudio.com/downloads/misc/Axe-Fx%20III%20MIDI%20for%203rd%20Party%20Devices.pdf Axe-Fx III MIDI for Third-Party Devices] |
| | | |
− | ==Axe Fx II SysEx Information for loading IRs== | + | =SysEx Model number per device= |
− | * The information below was provided by forum member LMO.
| + | The numbers below refer to the processors. |
− | * The Axe Fx II supports 2040-point impulse responses that are packaged for download in a series of 66 MIDI SysEx messages, as follows:
| |
| | | |
− | '''MIDI_START_IR_DOWNLOAD'''
| + | * 0x00 Axe-Fx Standard |
| + | * 0x01 Axe-Fx Ultra |
| + | * 0x02 MFC-101 |
| + | * 0x03 Axe-Fx II |
| + | * 0x04 MFC-101 mk3 |
| + | * 0x05 FX8 |
| + | * 0x06 Axe-Fx II XL |
| + | * 0x07 Axe-Fx II XL+ |
| + | * 0x08 AX8 |
| + | * 0x0A FX8 mk2 |
| + | * 0x10 Axe-Fx III |
| + | * 0x11 FM3 |
| + | * 0x12 FM9 |
| | | |
− | Prepare the Axe-Fx II to receive impulse response data
| + | [[category:Axe-Fx2]] |
− | | + | [[category:FM3]] |
− | Message Format:
| + | [[category:FM9]] |
− | <tt>
| + | [[category:Axe-Fx3]] |
− | :0xF0 sysex start | + | [[category:AX8]] |
− | :0x00 manufacturing ID byte 0 | + | [[category:FX8]] |
− | :0x01 manufacturing ID byte 1
| + | [[category:Remote]] |
− | :0x74 manufacturing ID byte 2
| + | [[category:All]] |
− | :0x03 model number
| |
− | :0x7A function ID
| |
− | :0x20
| |
− | :0x00
| |
− | :0x10
| |
− | :0xdd checksum
| |
− | :0xF7 sysex end
| |
− | </tt>
| |
− | | |
− | '''MIDI_G2_IR_DATA'''
| |
− | | |
− | There are 64 sysex messages, each containing 32 chunks of data. Each chunk consists of five
| |
− | bytes and can hold either four text characters or one 32-bit IR data sample.
| |
− | | |
− | The first data message sent includes 8 chunks of text that specify the 32-character IR name, and
| |
− | 24 chunks of IR data. The subsequent 63 data messages each contain 32 data samples for a
| |
− | total of 2040 samples.
| |
− | | |
− | Message Format:
| |
− | <tt>
| |
− | :0xF0 sysex start
| |
− | :0x00 manufacturing ID byte 0
| |
− | :0x01 manufacturing ID byte 1
| |
− | :0x74 manufacturing ID byte 2
| |
− | :0x03 model number
| |
− | :0x7B function ID
| |
− | :0x20
| |
− | :0x00
| |
− | :0xdd data chunk byte 0
| |
− | :0xdd data chunk byte 1
| |
− | :0xdd data chunk byte 2
| |
− | :0xdd data chunk byte 3
| |
− | :0xdd data chunk byte 4
| |
− | :--- 31 additional five byte data chunks --- | |
− | :0xdd checksum
| |
− | :0xF7 sysex end
| |
− | </tt>
| |
− | | |
− | '''MIDI_CLOSE_IR_DOWNLOAD'''
| |
− | | |
− | Terminate the IR download sequence
| |
− | | |
− | Message Format:
| |
− | <tt>
| |
− | :0xF0 sysex start
| |
− | :0x00 manufacturing ID byte 0
| |
− | :0x01 manufacturing ID byte 1
| |
− | :0x74 manufacturing ID byte 2
| |
− | :0x03 model number
| |
− | :0x7C function ID
| |
− | :0xdd encoded checksum byte 0 for IR data
| |
− | :0xdd encoded checksum byte 1 for IR data
| |
− | :0xdd encoded checksum byte 2 for IR data
| |
− | :0xdd encoded checksum byte 3 for IR data
| |
− | :0xdd encoded checksum byte 4 for IR data
| |
− | :0xdd checksum
| |
− | :0xF7 sysex end
| |
− | </tt>
| |
− | | |
− | '''Data Chunk Encoding Scheme'''
| |
− | | |
− | The data encoding scheme translates four octets into five septets. Each septet occupies the
| |
− | lower seven bits of a byte, with the most significant bit set to 0.
| |
− |
| |
− | <tt>
| |
− | :* octet is one byte containing 8 bits of data
| |
− | :* septet is one byte containing 7 bits of data
| |
− | :byte_chunk = (data[0] & 0xFF )<< 24 | (data[1] & 0xFF )<< 16 | (data[2] & 0xFF )<< 8 (data[3] & 0xFF;
| |
− | :* convert four octets to five septets
| |
− | :septet[0] = byte_chunk & 0xFF;
| |
− | :septet[1] = byte_chunk >> 7 & 0xFF;
| |
− | :septet[2] = byte_chunk >> 14 & 0xFF;
| |
− | :septet[3] = byte_chunk >> 21 & 0xFF; | |
− | :septet[4] = byte_chunk >> 28 & 0xFF;
| |
− | </tt>
| |
− | | |
− | [[Category:System and firmware]] | |