Using SysEx to recall Present/Effect bypass status Info available?

Evz

Inspired
sorry if someone already had solved this problem, but as i'm building my controller and adding features, I want my controller to be able to see if any assigned IA effects are currently ON in a present recalled, and according to the axe wiki, the function ID is 0x0e, but there is no data available under this heading.

I assume that as with Get_Preset_Name i need to send a sysex call function to the axe and it will bounce back the preset's effect info, does anyone have any info on this?

I see there is a Patch_Dump sysex, but i do not want to load the preset to be edited, nor do i know what the second two bytes of the FX (undetermined states) are for, or how to use them...

Thanks!
 
I don't think it is documented yet. I was just working on my M4L project, so was easy to take a quick look at the Ultra's responses to function 14.

Test 1: Blank preset
toAxe: 240 0 1 116 1 14 247
fromAxe: 240 0 1 116 1 14 247

Make sure you write your code to handle this message with no data payload.


Test 2: Blank preset, with Amp1 block
toAxe: 240 0 1 116 1 14 247
fromAxe: 240 0 1 116 1 14 10 6 5 2 1 247

There's a 5-byte data payload. The first two bytes are the ID code for AMP1, "10 6". Not sure what the next two bytes are for, but I suspected the fifth byte was the bypass state.


Test 3: Blank preset, with Amp1 block in bypassed state
toAxe: 240 0 1 116 1 14 247
fromAxe: 240 0 1 116 1 14 10 6 5 2 0 247

Confirmed: the fifth byte indicates bypass state. 0=Bypassed; 1=Not Bypassed.


What happens with more effect blocks?

Test 4: Blank preset, with Amp1 block and Cab1 block
toAxe: 240 0 1 116 1 14 247
fromAxe: 240 0 1 116 1 14 10 6 5 2 1 12 6 7 2 1 247

The data payload is now 10 bytes. Two groups of 5 bytes, with the first indicating Amp1 bypass state and second indicating Cab1 bypass state ("12 6" is the effect ID for cab1).


Test 4: Blank preset, with Amp1 not-bypassed and Cab1 bypassed
toAxe: 240 0 1 116 1 14 247
fromAxe: 240 0 1 116 1 14 10 6 5 2 1 12 6 7 2 0 247

Just as expected.

So, the response is variable in size. It can contain no data, or a large amount of data. The data is organized in 5-byte chunks, one for each effect placed on the AxeFX routing grid. The first two bytes in each chunk are the effect ID, and the fifth byte indicates the bypass state of the corresponding effect block.
 
The third and fourth byte in each 5-byte chunk appears to be the CC number associated with the effect block, as shown in the AxeFX's I/O -> CTRL page.
 
Last edited:
Thanks Scrutinizer! So looks like my data storage array will have to be ready to take the potentially full 4x12 grid... Then filter out what is on and what is off. According to data dump request the axe would send out at most 2060 bytes... The midi library I'm using now I think has a max storage of 256 bytes, but I could change that ;) will have to look into it when I get a chance! Thanks again!
 
Hey Scrutinizer, I've put in a test run and monitored the axe output, but i don't see how the third and fourth byte relate to midi cc.... would it be possible to add this info to the sysex section of the wiki? or would this be Yek's field?

Thanks!
 
Bytes 3 and 4 look like a byte broken into nibbles, stored low-nibble-first. So, "5 2" translates to 0x25, which is 37 decimal, and is the default bypass CC# for amp1.

I don't have editing access to the wiki. But if someone who does wants to add the section, they can feel free to use the following text.


MIDI_GET_PRESET_EFFECT_BLOCKS_AND_CC_AND_BYPASS_STATE

Message format:

0xF0 sysex start
0x00 Manf. ID byte0
0x01 Manf. ID byte1
0x74 Manf. ID byte2
0xdd Model #
0x0E Function ID

0xdd effect ID LS nibble
0xdd effect ID MS nibble
0xdd bypass CC# LS nibble
0xdd bypass CC# MS nibble
0xdd bypass state: 0=bypassed; 1=not bypassed

… etc …

0xF7 sysex end

This message is returned after sending the MIDI_GET_PRESET_EFFECT_BLOCKS_AND_CC_AND_BYPASS_STATE message.

Data is variable in length, and appears to be arranged in 5-byte blocks which encode the effect ID, the bypass CC#, and the bypass state for each effect in the current preset.
 
Hi Scrutinizer, may i ask how would the message format get translated to "Lemur language"? Would this be in a form of script or inserted in the sysex as 0x00, 0x01,0x74....? How would an amp 1 block bypass message look like according to the format you suggested previously?
 
If you simply want to turn the effect blocks on and off, you can do this with standard CC messages. No sysex required.
 
Most of the code you need is already there in the templates I have posted. Do you know how to program in C or basic or another computer language? Lemur's scripting language is like C or C++, but is much simpler.

To request the bypass state, send the following sysex message to the gen1 AxeFX
F0 00 01 74 0n 0E F7
where n is 1 for Ultra or 0 for Standard

The response message format is documented in my post above.

In Lemur you will need to create a script, set the execution to "On MIDI", "F0 System Exclusive", "Midi 0", and leave the other execution fields "0 to 0" and "1 to 1" alone as these are not used for sysex.

The script will need to first detect the incoming bypass state message. I show how to do this in the templates I have already posted. Find the scripts "sxin()" and "IsGen1Sysex()".

Then parse the remainder of the sysex message. Something like this:
Code:
decl i;
for(i=5; i+4 < sizeof(MIDI_ARGS); i += 5){
    effectID = MIDI_ARGS[i] + 16*MIDI_ARGS[i+1]; 
    bypassCC = MIDI_ARGS[i+2] + 16*MIDI_ARGS[i+3]; 
    bypassState = MIDI_ARGS[i+4]; 
    // do something with this information
}
disclaimer - use at own risk, etc. etc. Hopefully it is useful.
 
Hi, I have no experience at programming, hope you can continue to guide me along. Thank you!

Few questions below:

1) Where do i place this (0xF0 0x00 0x01 0x74 0x01 0x0E 0xF7) sysex data? You've mentioned about creating a script (set execution to "ON MIDI"...etc), do i place the sysex data in or the Code you provide at bottom of your message? Also, where would this script be placed under? Trigger button or Refresh button or somewhere else?

2) I have seen the template you've uploaded at Lemur and it worked perfectly well. Thanks again! However, with my untrained eyes, i can't seem to be able to relate "sxin() and IsGen1Sysex()" with the bypass formula you provided in the previous post. Do you mind illustrating further? The template you've posted consisted of faders contained within another object. Do we have to do the same for buttons (effect triggers)?
 
Well, to be honest, I am not willing to provide free on-line lessons in programming.

If you cannot locate the scripts in my template, then I am not sure what I can do to help.
 
Bytes 3 and 4 look like a byte broken into nibbles, stored low-nibble-first. So, "5 2" translates to 0x25, which is 37 decimal, and is the default bypass CC# for amp1.

I don't have editing access to the wiki. But if someone who does wants to add the section, they can feel free to use the following text.


MIDI_GET_PRESET_EFFECT_BLOCKS_AND_CC_AND_BYPASS_STATE

Message format:

0xF0 sysex start
0x00 Manf. ID byte0
0x01 Manf. ID byte1
0x74 Manf. ID byte2
0xdd Model #
0x0E Function ID

0xdd effect ID LS nibble
0xdd effect ID MS nibble
0xdd bypass CC# LS nibble
0xdd bypass CC# MS nibble
0xdd bypass state: 0=bypassed; 1=not bypassed
I'd be happy to stuff it into the wiki for you. Nice to see someone else sharing midi format info. You know this already, but for the Std/Ultra, nibble mode is used as you describe. For the Axe II, nibble mode is not used; data is converted by taking four bytes of eight-bit data and making it into five bytes of seven-bit data. Plus of course there are many additions and changes to the sysex message formats.

I see Yek has been here ahead of me. There is already a link to this thread in the wiki.
 
Last edited:
I'm getting some strange results when I request this info from the AxeFx-II v6.02.

For a (testing) preset that has a bypassed Reverb1 and an active Amp1 I get the following response.

Request: F0 0 1 74 1 E 8A F7
Return: F0 0 1 74 3 E 1 4A 10 53 6 2 26 51 73 6 F7

Per effect block the data should be
- 1 4A 10 53 6
- 2 26 51 73 6

But that data doesnt make any sence.

All the other sysexes I'm using so far work fine, such as preset name, tuner info and preset change event sysex, but this one I just cannot interpret the data. I've tried sending different model bytes 0x01 to 0x03, but that doesnt change anything.

Anyone got a clue?
 
Last edited:
The bits in the byp response are in a different order on the AxeFX II.

Code:
// msg[i] is the the first byte in the 5-byte group.
blk = ((msg[i+3] & 0x78) >> 3) + ((msg[i+4] & 0x0F) << 4); // block id
cc = ((msg[i+1] & 0x7E) >> 1) + ((msg[i+2] & 3) << 6);  // cc number
byp = msg[i] & 0x7F; // byp and XY state
 
Does someone know what triggers the AxeFx to start sending Looper Status messages? (0x23)
I never receive these mind of messages until I open the looper block in Axe-Edit, afterwards it just keeps sending these messages. It contains the status for the various looper controls and the current position of the looper.

Thanks!
 
Does someone know what triggers the AxeFx to start sending Looper Status messages? (0x23)
I never receive these mind of messages until I open the looper block in Axe-Edit, afterwards it just keeps sending these messages. It contains the status for the various looper controls and the current position of the looper.

I was just tracking down this exact thing today!

My results are on the AxeFx II with FW7. I don't know about Std/Ultra.

To turn the looper monitoring on, try sending:
F0 00 01 74 03 23 01 24 F7

And off again:
F0 00 01 74 03 23 00 25 F7

For my own reference, and in case it's useful for anyone else, I think the looper message format from the AxeFX II is:
F0 00 01 74 03 23 <status> <position> <checksum> F7

Where so far I've seen <status> being one of:
00: Stopped
01: Recording
02: Playback
06: Play Once
0A: Stack
0E: Play Once + Stack

During playback/stacking, <position> seems to range from 0 to 99 (i.e. maximum value of 63H).

During recording, It looks to me like it ranges from 0 to 127 (i.e. maximum value of 7FH) but it might repeat itself before it gets to the maximum recording time and starts playing back automatically on modes other than "MONO". I think this means if you want to show the recording position correctly, you will need to take the mode into account and keep track of how many times the position has looped around. I don't think Axe-Edit handles this correctly, it looks to me like it jumps when I am recording. I am not sure this is intended behaviour, I'm still working it out the exact details.
 
Thanks!

I've already found out that the status is a bitmap for the following values:

Record - 1st bit
Play - 2nd bit
Once - 3rd bit
Dub - 4th bit
Reverse - 5th bit
HalfSpeed - 6th bit
Undo - 7th bit

Thanks for sharing the looper status on and off toggle, been sniffing midi packets all night long, without luck :p
 
Back
Top Bottom