Post your questions, opinions and reviews of the MPC1000. This forum is for discussion of the OFFICIAL Akai OS (2.1). If you wish to discuss the JJ OS, please use the dedicated JJ OS forum
User avatar
By stereoroid Tue Feb 17, 2004 11:30 am
Hi,

Has anyone disassembled the MPC1000 PGM file format, or is there anything from Akai on this? I'm looking to write some Python scripts to convert between PGM and editable Text formats.

(The MPC1000's own interface is fine for general use, I don't need to emulate it on the PC, but I do want to do "bulk" operations, like quickly setting up 61-note multisamples, changing all samples to "Note On".)

Otherwise I'll keep hacking away at it myself, with help from the Midicase "MPC1000 Program Creator". This program does the basic operations OK, but skips a few parameters. I've also got to figure out the MIDI note table, but that should be simple.

The strange thing is that while a PGM file is always 10.5kB in size, I can only account for about 3kB of it so far, I can't see what the rest of the file is used for..!

By mpc3000 Tue Feb 17, 2004 3:25 pm
"I've also got to figure out the MIDI note table"

It is actually a LOT simpler than the MPC60/3k/2k midi note table.

There are actually two interrelated tables for this. One could be derived from the other, but I would not rely on this since it looks like Akai may provide some sort of ehancement in this area.

Akai does not give out their format (see my previous message on it).
User avatar
By stereoroid Tue Feb 17, 2004 6:27 pm
I've done a little more work on it today, and it's looking something like this so far (all values in hex):
Code: Select allOffset Item    Length
---------------------
0000   Header     18
0018   Pad A01    A4
00BC   Pad 2      A4
0160   Pad 3      A4
 ...
272C   Pad D14    A4
27D0   Pad D15    A4
2874   Pad D16    A4
2918   PAD2MIDI   40
297B   MIDI2PAD   40


Header looks simple, the first two digits must be the file length (0x2A04 = 10756, the size in bytes.). The rest is a padded string:
04 2A 00 00 4D 50 43 31 30 30 30 20 50 47 4D 20 31 2E 30 30 00 00 00 00
.*..MPC1000 PGM 1.00....

Each Pad breaks down something like this:
Code: Select allSample  Param     Offset  Notes            Length
-------------------------------------------------
1       Name       0000   ASCII 16-char        10
1       Level      0011   0-127                 1
1       LowVel     0012   0-127                 1
1       HighVel    0013   0-127                 1
1       Tune       0014   TBD                   2
1       PlayMode   0016   0=OneShot, 1=NoteOn   1
2       Name       0018   ASCII 16-char        10
2       Level      0029   0-127                 1
2       LowVel     002A   0-127                 1
2       HighVel    002B   0-127                 1
2       Tune       002C   TBD                   2
2       PlayMode   002E   0=OneShot, 1=NoteOn   1
3       Name       0030   ASCII 16-char        10
3       Level      0041   0-127                 1
3       LowVel     0042   0-127                 1
3       HighVel    0043   0-127                 1
3       Tune       0044   TBD                   2
3       PlayMode   0046   0=OneShot, 1=NoteOn   1
4       Name       0048   ASCII 16-char        10
4       Level      0059   0-127                 1
4       LowVel     005A   0-127                 1
4       HighVel    005B   0-127                 1
4       Tune       005C   TBD                   2
4       PlayMode   005E   0=OneShot, 1=NoteOn   1
*       Overlap    0062   0=Poly, 1=Mono        1
*       MuteGroup  0063   1-32, 0=None          1
*       Level      008F   0-100                 1
*       Pan        0090   0-100 = Left-Right    1
*       Output     0091   0-2 = St, 1+2, 3+4    1

There are FX Send and Filter parameters per pad that I need to check on tonight, around 0x8A or so.

The PAD2MIDI and MIDI2PAD tables (my names for them) are starting to make sense:
- PAD2MIDI is a list of the MIDI notes assigned to each pad: offset 0x00 is Pad A01, its value defaults to 0x25 (note 37)
- MIDI2PAD is the opposite: offset 0x00 = MIDI note 35, its value defaults to 0x2D (I think) = 45 = Pad C14.
If I modify these tables I'll need to keep track of matching values and avoid duplicates, but I've yet to have any problems with the default assignments, so I'm not going to worry about changing them yet...
I think I'll go home now!

By mpc3000 Wed Feb 18, 2004 3:46 pm
Well, now that you have given it away...

Glad I already sold the format to the people needing it.
User avatar

By stereoroid Wed Feb 18, 2004 4:53 pm
mpc3000 wrote:Well, now that you have given it away...

Glad I already sold the format to the people needing it.


Do you work for Akai? I can find nothing indicating this file format is proprietary or banned under a license agreement. If not, how can you talk about selling information like this? No criticism is intended, I don't know the whole story, but that's a strange thing to say..! :roll:

I'm not exactly a hacker, and I've only done this a couple of times before, but the basic format is so simple that it didn't take me much time at all. Or maybe I've spent too much time around Linux, I expect programming information like this to be freely available - like previous formats - with no constraints or commercial gain involved. I'll probably create a web page on it once I fill in the gaps and write some Python scripts to do things to PGM files... but I could have done it for the fun alone.

Cheers...

By brousaille Tue Feb 24, 2004 9:48 am
Thanks Steroroid
for your job !!!

By mpc3000 Tue Feb 24, 2004 9:04 pm
"If not, how can you talk about selling information like this"

Easy. It is no different than someone getting paid to paint a house. The person getting hired wants the money and the person with the house doesn't like to paint.

People write software that use different file formats. They do not need or want to reverse engineer the formats themselves, so they pay people like me to supply them the format. The only `proprietary` knowledge here is me knowing who pays for this info.

Economics 101.