• We would like to remind our members that this is a privately owned, run and supported forum. You are here at the invitation and discretion of the owners. As such, rules and standards of conduct will be applied that help keep this forum functioning as the owners desire. These include, but are not limited to, removing content and even access to the forum.

    Please give yourself a refresher on the forum rules you agreed to follow when you signed up.

Sysex 0x02 MIDI_GET_PARAMETER

bossredman

Inspired
Hi - can anyone ellaborate on what sysex msg MIDI_GET_PARAMETER actuallly does pls.?

I've looked on the wiki and still a little unsure.

For example - could i request it to send the 'name/type' of a block?
ie for an amp block set to “Plexi Normal” - can I get the Characters “Plexi Normal” from the returned msg?

I see it returns:
0xdd effect ID bits 6-0
0xdd effect ID bits 13-7
0xdd parameter ID bits 6-0
0xdd parameter ID bits 13-7
0xdd parameter value bits 6-0
0xdd parameter value bits 13-7
0xdd parameter value bits 15-14

Effect ID's are listed on the wiki & I've used them - but I see no mention of Parameter ID's anywhere.
Am i right in assuming they are similiar?
ie a numeric list, each refering to a block's paramer?

I'd like to be able to get the "type" of all the Blocks in my Preset.
 

Nero

Inspired
you can get all kinds of parameters, you should get a midi monitor to see what functions the ax-edit sends when you change a parameter that will give you an idea of parameter id does what
 

Nero

Inspired
this gets me the amp name for amp 1 (you have to include the checksum and 0xF7 at the end of these arrays, in my code they are added before sending) you gotta request it again when X/Y tho

[0xF0,0x00,0x01,0x74,modelId,0x02,0x6A,0x00,0x00,0x00,0x00,0x00,0x00,0x00]

amp 2

[0xF0,0x00,0x01,0x74,modelId,0x02,0x6B,0x00,0x00,0x00,0x00,0x00,0x00,0x00]
 

bossredman

Inspired
Thanks that's good go know.
I have calculate the check sum NPS.

So 6a, 00 and 6b, 00 are amp1 and amp2's Effect ID resp right.
So is 00, 00 square to parameter TYPE?

Are ALL the parameter IDs listed anywhere pls.
 

bossredman

Inspired
Actually thinking about it - I'm a little confused - sorry.
Do the Effect ID bytes in this sysex msg work the same as in the MIDI_GET_PRESET_EFFECT_BLOCKS_AND_CC_AND_BYPASS_STATE - sysex?
ie
0xdd Effect ID LSB
Bit 0:
Bit 1:
Bit 2:
Bit 3: Effect_ID Bit 0
Bit 4: Effect_ID Bit 1
Bit 5: Effect_ID Bit 2
Bit 6: Effect_ID Bit 3
0xdd Effect ID MSB
Bit 0: Effect_ID Bit 4
Bit 1: Effect_ID Bit 5
Bit 2: Effect_ID Bit 6
Bit 3: Effect_ID Bit 7
Bit 4:
Bit 5:
Bit 6:
If so, then shouldn't AMP 1 be: [0xF0,0x00,0x01,0x74,modelId,0x02,0x53,0x06,0x00,0x00,0x00,0x00,0x00,0x00, ...]
 

Nero

Inspired
nope they are not, for block param id

(byte1 & 0x7F) | ((byte2 & 0x7F)<<7);

this is a reference for some parameter id's you just have to get a midi monitor and see the messages sent back and forth
 

bossredman

Inspired
Thanks to you both for this info.
Looks like the parameter ID's fromat must have changed for AxefX II as that link shows:

0xdd parameter ID bits 6-0
0xdd parameter ID bits 13-7 as

Amp 1 = 0A 06
Amp 2 = 0B 06

But using Nero's values of 6A,00 & 6B,00 resp - I can now sent the msg & get a reply.
 

bossredman

Inspired
cheers - i got it working in a fashion.

Sometimes the returned name is not 100% accurate (ie missing or extra chars at the end).

But good enough for now.
Thanks
 

bossredman

Inspired
FYI (for anyone interested).

I have a block of code that (for the current PSet) extracts all the Block ID's, their name, CC# & bypass state - for use with IA switches.

So ive added the following:
If detect an Amp1 block then I send this: MIDI.sendSysEx(16, Amp1_Type_sysex, true);
If detect an Amp2 block then I send this: MIDI.sendSysEx(16, Amp2_Type_sysex, true);

where:
Code:
byte Amp1_Type_sysex[16] = {0xF0, 0x00, 0x01, 0x74, 0x03, 0x02, 0x6A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6E, 0xF7};
byte Amp2_Type_sysex[16] = {0xF0, 0x00, 0x01, 0x74, 0x03, 0x02, 0x6B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6F, 0xF7};
My sysex processing block then pulls out the amp Type:

Code:
if (SysExArray[5] == 0x02)      //If read a Parameter ID sysex (0x02)
  {
      Serial.println("          ++++ Parameter ID sysex - 0x02 ++++");
      int sizear = MIDI.getSysExArrayLength();
    
      for(int i=0; i<sizear; ++i)
      {
          if (SysExArray[6] == 0x6A)
          {
              Amp1_Type[i] = MIDI.getSysExArray()[i+18];
          }
          else if (SysExArray[6] == 0x6B)
          {
              Amp2_Type[i] = MIDI.getSysExArray()[i+18];
          }
          if(SysExArray[i+18] == NULL)
          {
              break;
          }
      }
  }
Which allows me to dump the amp Types to my display if needed (ie whne a switch is pressed)
Code:
void Amp_Info()
{
    tft.setRotation(2);
    tft.clearScreen(RA8875_BLUE);
    tft.setFontScale(2);
    tft.setTextColor(RA8875_YELLOW, RA8875_BLACK);
    tft.setCursor(10, 50);
    tft.print("Amp 1: ");
    tft.println(Amp1_Type);

    tft.setCursor(10, 200);
    tft.print("Amp 2: ");
    tft.println(Amp2_Type);
}
 

bossredman

Inspired
Sorry to get back to this one - but now trying to read the Delay1 Time value.

Is {0xF0, 0x00, 0x01, 0x74, 0x03, 0x02, 0x70, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0xF7}; teh correct msg to send?

[Edit] this is based on above disacussion regrading teh msg format chage & having to concatenate the Block ID bytes - so assumed I had to do the same with the PArameter ID bytes aswell
 

bossredman

Inspired
Can any one pls help me set the Drive parameter of AMP1 to 5 via sysex msg.
I'm working on the principle that 5 equates to a "parameter value" of 127(dec)/0x7F(hex)

But I just can't figure out how to translate 127/0x7F to the required msg byte format

0xdd parameter value bits 6-0
0xdd parameter value bits 13-7
0xdd parameter value bits 15-14

I need to find teh 3 x ?? values:
{0xF0, 0x00, 0x01, 0x74, 0x03, 0x02, 0x6A, 0x00, 0x01, 0x00, 0x??, 0x??, 0x??, 0x01, 0xchecksum, 0xF7}
 

Nero

Inspired
parameter value goes from 0 to 65534 which is split into three 7-bit bytes, to conver a number ranging from 0 to 65534 into 3 bytes

first byte
(value & 0x7F);

second byte
((value >>= 7) & 0x7F);

third byte
((value >>= 14) & 0x7F);
 

bossredman

Inspired
Thank you!!!

So for a Amp Drive value of 5 - it would equate to 32767 (due to the 16 bit value range of 0 to 65534).
Which in Binary = 0111 1111 1111 1111

Therefore:
first byte
(value & 0x7F); = (111 1111 & 0x7F) = 7F


second byte
((value >>= 7) & 0x7F) = (11 1111 1 & 0x7F) = 7F;


third byte
((value >>= 14) & 0x7F) = (01 & 0x7F) = 1;

Is that correct?
 

bossredman

Inspired
Thanks again.

One last thing - could you point me in teh right direction of how to do this with Arduino code pls.
I'm not sure how I code to work with the specific bits ie 0-6 & then 7-13 & then 14-15.
 
Top Bottom