How to open .syx file

Is there any one know about how to open the .syx file? there is some SysEx command on it and I want that. thank you.

Did you try to open it as text or HEX to see the contents?

Yes, I have tried to open it with text, but I only get garbled code. and I don't know how to open with HEX ? how to open it as HEX?

with HEX editor

But if this a binary SYX file - what are you intended to read in it?
It only makes sense to open them if you understand their format.
https://mido.readthedocs.io/en/latest/syx.html

there has some command on sending controlChange with SysEx. I need it on my project. thank you.

Well not so much as a command as a whole sequence of things you need to to transfer this to your synth or your DAW.

This is called a system exclusive message and is normally used to set up parameters on a synth or do some other special operations.

I use them to send pre configured chord sequences when I make my accessible guitars.

Most of the USB libraries can't handle more than four bytes of such a message and so you have to send them in a series small packages, until the whole sys Exc ( System Exclusive ) has been sent.

What is this Sys Exc message going to do when it arrives in your system? As the name implies it is for specific use with a specific manufacturers product. You can only make sense of the message if you know what the manufacture wants you to do with it. In other words it is simply a list of data. So the actual message is only half the information, you need to know what to do with this a
data.

Read the description at the middle of this page.
https://cmtext.indiana.edu/MIDI/chapter3_system_messages.php

This is a good link to read as well
https://blog.landr.com/midi-sysex/

it is too late on my time, I need to go some sleep. can I know more about SysEx from you? I'll contact you tomorrow.

Ok whenever you are ready. It is mid afternoon here, time for a nap for me.

Hi, Can you tell about how the daw understand the SysEx message ?
For example my SysEx is: "oxF0, Manufacturer ID, Device ID, Mode ID, command ID, xx, xx, xx, Checksum, end of SysEx", So how the daw understand "xx xx xx" in my SysEx message? should I need to create a mapping file to explain to the daw and telling it what to do ?

Or there is a given code fixed for such as "00 18 00" is for media playing, or "00 1E 09" is for record ?

Quite simply it doesn't.

It passes them to the Synth and the software in the synth knows what to do with the data. That is why there is nothing you can do with the data unless you know how the synth is going to react to the data. Even then I doubt you can do anything with the data unless you have the Synth connected and able to respond to the message.

From the MIDI specification:-

System Exclusive.
11110000 - Start System Exclusive message

0iiiiiii - ID code or start of two or three ID codes
0ddddddd - The first byte of data in the message
.
.
0ddddddd - The last byte of data in the message
.
11110111 - - End of System Exclusive message

This message makes up for all that MIDI doesn't support. (iiiiiii) is usually a seven-bit Manufacturer's I.D. code. If the synthesizer recognizes the I.D. code as its own, it will listen to the rest of the message (ddddddd). Otherwise, the message will be ignored. System Exclusive is used to send bulk dumps such as patch parameters and other non-spec data. (Note: Real-Time messages ONLY may be interleaved with a System Exclusive.) This message also is used for extensions called Universal Exclusive Messages.

There is no need for a check sum in a message although the target of the message might require one. Note all the data in the message is only 7 bits. That is the numbers starts with a zero.

No it doesn't need to or want to know.

No these are not part of a sysExc message. There are other "normal" messages for that.

All I want is DIY a midi cc controller, because I want to change cc number sometimes. so try to use SysEx to sending onteOn , noteOff and also continue control change message to daw, and also reassign the control numbers by receiving the SysEx from PC(C#).

So How should I create SysEx message to control the daw?

The header of SysEx would be F0 Manufacturer ID Device ID , and the ending of SysEx is Checksum F7. right?
So, what d middle part should I send, the daw will implement noteOn , noteOff, and continue control change(CC 1, CC 11, CC 3)?
thank you.

Is that means the SysEx message is only used to comunicate between midi device. and can not use to comunicate with DAW?
And there is another type of message can be sanding to daw for controlling, right?

That is not what a SysEX message is going to do, or indeed can do. You do not seem to understand what a SysEx message is all about, after me telling you.

No not in the least.

I keep saying you can not send a Note on, Note off and CC message with a SysEx message.

Then just use the code in the interface you are programming to send these messages with normal MIDI commands.

Correct. It is only used to pass some information to a synth, or other device that is outside the normal MIDI messages.

This whole thread is an XY problem
X-Y Problem
please read this.

And tell us what you are trying to make and with what type of Arduino?

Oh, shit, I was wrong on this direction.

Anther questions:
when I using midi library implement noteOn, noteOff, and control change function(as below code shows), I can receive the SysEx message from pc(C#)(i have not wite the code of SysEx yet.) , right?

I didn't succeed in upgrading the firmware on my mini uno, so I use Teensy 4.0.

#include <Bounce.h>
#include <ResponsiveAnalogRead.h>
#include <Metro.h> // Include the Metro library




Metro serialMetro = Metro(250);  // Instantiate an instance

Bounce button1 = Bounce(2, 5);  // 5 = 5 ms debounce time
Bounce button2 = Bounce(3, 5);  // which is appropriate for good
Bounce button3 = Bounce(4, 5);  // quality mechanical pushbuttons

int pushed[3] = {0};
bool ispushed = false;
const int ButtonCC[] = {117,118,119};   //studio one using controller response on button 
const int ButtonNote[] = {125,126,127};  // reaper using noteOn response on button

const int  Leds = 4;
const int ledPins[Leds] = {8,5,6,15}; 


const int A_PINS = 3;
const int ANALOG_PINS[A_PINS] = {A5,A6,A7};
int CCID[A_PINS] = {3, 1, 11};
float data[A_PINS] ={0};
float dataLag[A_PINS] = {0};

bool CONNECTED = false;
// ititialize the ReponsiveAnalogRead objects
ResponsiveAnalogRead analog[]{
  ///////////////////////////////////////////////////////////////////////////
  {ANALOG_PINS[0],true},
  {ANALOG_PINS[1],true},
  {ANALOG_PINS[2],true},
  ///////////////////////////////////////////////////////////////////////////
};

void ledsOff(int endingIndex)  
{
  for (int i = 0; i < endingIndex; i++)
  {
    if (digitalRead(ledPins[i]) == HIGH){digitalWrite(ledPins[i], LOW);}
  }
}

// leds controller
unsigned long previousMillis = 0;
unsigned long currentMillis = 0;
void ledsControl(int index, bool alloff, bool ishigh, bool isblink = false) //isblink = false is option parameters
{
  if (alloff) {ledsOff(3);}
  if (ishigh) {digitalWrite(ledPins[index], HIGH);}
  if (!ishigh) {digitalWrite(ledPins[index], LOW);}
  if (isblink)
  {
    previousMillis = millis();
    if (currentMillis - previousMillis >= 150)
    {
      digitalWrite(ledPins[index], LOW);
      previousMillis = currentMillis;
    }
  }
}
////////////////////////////////////////////////////////////////////////////
void setup() {
  pinMode(2, INPUT_PULLUP);
  pinMode(3, INPUT_PULLUP);
  pinMode(4, INPUT_PULLUP);
  for (int i = 0; i < Leds; i++)
  {
    pinMode(ledPins[i], OUTPUT);
  }

  ledsControl(3,false,true);
}
///////////////////////////////////////////////////////////////////////////
void loop() 
{
  Potentiometer();
  ButtonPushed();
}
/////////////////////////// +Potentiometer /////////////////////////////////////////////////

void Potentiometer(){
  // update the ResponsiveAnalogRead object every loop
  for (int i = 0;i < A_PINS;i++){
    analog[i].update(); 
    // if the repsonsive value has change, print out 'changed' 
    if(analog[i].hasChanged()) {
      data[i] = analog[i].getValue()>>3;
      if (data[i] != dataLag[i]){
        dataLag[i] = data[i];
        usbMIDI.sendControlChange(CCID[i], data[i], 1);
      }
    }
  }
}
/////////////////////////// +Buttons /////////////////////////////////////////////////

void ButtonPushed()
{
  button1.update();
  button2.update();
  button3.update();
  // Note On messages when each button is pressed
  if (button1.fallingEdge()){MIDIActions("RECORD");ispushed = true;}
  if (button2.fallingEdge()){MIDIActions("PLAY");ispushed = true;}
  if (button3.fallingEdge()){MIDIActions("STOP");ispushed = true;}



  if (serialMetro.check() == 1)
  {
    if (ispushed){ReleaseButtons();ispushed = false;}
  }
  
}
//-----------------------------------------------------------
void MIDIActions(String action)
{
  if (action == "RECORD")
  {
    usbMIDI.sendControlChange(ButtonCC[0], 127, 1);
    usbMIDI.sendNoteOff(ButtonNote[0],127,1);
    ledsControl(0,true,true);
    ledsControl(1,false,true);
  }

  if (action == "PLAY")
  {
    usbMIDI.sendControlChange(ButtonCC[1],127,1);
    usbMIDI.sendNoteOn(ButtonNote[1],127,1);
    ledsControl(1,true,true);
  }

  if (action == "STOP")
  {
    usbMIDI.sendControlChange(ButtonCC[2],127,1);
    usbMIDI.sendNoteOn(ButtonNote[2],127,1);
    ledsControl(2,true,true);
  }
}
//--------------------------------------------------------
void ReleaseButtons()
{
  for (int i = 0; i < 3; i++)
  {
    usbMIDI.sendControlChange(ButtonCC[i], 0, 1);
    usbMIDI.sendNoteOff(ButtonNote[i],127,1);
  }
}

You can, but as it is unlikely that your system needs to know about any SysEx messages then why would it send any?

Bit of a sledgehammer to crack such a small nut.Normally I would use a Leonardo or Micro type of Arduino for this sort of job. You only need a small fraction of the power a Teensy has.

Did you write this code? It seems a very odd and inefficiency way to go about things. Sending a string to the MIDIActions function smacks of someone who dosn't know what they are doing. Why not just send a number? Strings can be problematic on small micro controllers. Also why is a note off message being sent along with a record message and a note on being sent with a play message. It makes no sense to me.

Anyway now we have the code what is the problem you are finding with it?

yeah, this is my first project, I don't know about Arduino at all before. so I buy the wrong one.

yeah, i wrote it.
haha, yes, the code is really bulky . I will change the string to number after For a moment.

and sorry for my poor english, I don't know what is " Also why is a note off message being sent along with a record message and a note on being sent with a play message. It makes no sense to me." means.

I don't know. please tell that problem.

thank you .

It means that there is no need to do:-

or

or

when you send a

Why do you do this?

No that is a problem you have to tell me.
You posted code, does it work like you expect it to?
If yes then fine we are done.
If no then what is the code doing and how is it different from what you expected it to do?

Oh, that because I may use two daw, noteOn is work as a button in Reaper, and not work on studio one, but sending control change (value = 127) can work as a button in studio one.