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.
 
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
 
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]
 
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.
 
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, ...]
 
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
 
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.
 
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
 
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);
}
 
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
 
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}
 
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);
 
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?
 
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.
 
Back
Top Bottom