Parsing SysEx files - function id's in .syx?

tgunn

Experienced
Howdy programmers,

As a fun project I wanted to extract things like patch names, progid's etc from .syx files for the AxeFx(2).
I've seen the info about realtime sysex messages in the wiki, but they don't match with what I'm seeing in bank/preset files.
Here's an example of a preset name sysex (randomly selected from here: Axe-Change - Download Preset - Dynamic JCM800 - by FractalAudio

f0 00 01 74 03 78 40 00 02 04 00 00 00 00 44
00 00 79 00 00 6e 00 00 61 00 00 6d 00 00 69 00 00 63 00 00 20 <- from hereon out it appears to be the preset name string.
<snip for brevity>
00 00 00 00 13
... and.... f7!

The first few bytes up to (and including) 03 (AxeFx II) I'm aware of, but I haven't found any reference to function id 0x78.
I also see lots of 0x79 in syx files. Is this some container format perhaps? I.e. data within data?
 
+1 I'd like to see info on the spec as well for this and all the parameters in sys files. I'd sign a NDA if needed.
 
I've done it, when I created the AxeFXReporter tool - its NOT fun! ;)

Functions 0x78 seems to be the 'grab preset data' function for the Axe-FX, and because the information returned is HUGE, it is broken down into several sub packets which have the 0x79 identifier.

Don't forget the the information comes back with each byte split into 3 septet blocks. I put the instructions on how to decode that on the Wiki.

The preset name is relatively easy to extract from this. There is also something in the initial function that specifies whether the actual preset number is included in the SYX file too (you have the option to include the preset number in the file or not) - I'll have to go back through my AxeFXReporter code to see if I can get the details if you are interested.
 
Thanks CyberFerret. I'm definitely interested in any details you feel comfortable with sharing.

I looked a little closer at a bank file and from what little I can tell, each preset block seems to be composed of:

0x77 - a preset header
- the data is 4 bytes (well, septets) containing first the bank id (0=A, 1=B, 2=C) then the 0-127 preset number, or simply a 14 bit number.
- followed by 00 10 (always in the presets I've looked at so far).

0x78 - In a bank file, each preset contains 32 of these.
The first one contains the preamble 40 00 02 04 00 00 which I'm interpreting as a hint that what follows is the preset name string.

Am I right in guessing that the string is a 21bit unicode string, possibly (but not always) zero terminated?
Edit: the 0x40 is probably length until the end of the string.

0x79 - The preset prologue. The data is 3 bytes, but I've no idea what they are.

Using this, I can at least build a map of preset->name for a syx file.
 
Last edited:
Thanks guys and thanks for all the info CyberFerret. FYI I've uploaded a first version of a tool I wrote to the Gordius forum along with some documentation.
 
Back
Top Bottom