Stephen Norum—MPC 1000 PGM File Format

Some addition (old/instead) are made by Nina Scholz, 2009-03-07. The original file is here: http://mybunnyhug.com/fileformats/pgm/.

Hello,

This page documents the Akai MPC 1000 PGM file format version 1.00. This information is provided to help developers create software for the MPC 1000. If information from this page is used in an application, I would love to hear about it.

If you have any questions, comments, or corrections regarding the following information, do not hesitate to send me an e-mail at stephen@mybunnyhug.org.

Take a look at my other projects!


Stephen Norum

File Layout Overview

The MPC 1000 PGM file format has four main sections. The "Header Data" section, the "Pad Data" section, the "Sample Data" selection enclosed in the "Pad Data" section, and the "MIDI/Slider Data" section.

The MPC 1000 can assign up to 4 samples to each of its 64 pads. On this page I refer to the samples as Sample 0 to Sample 3 for Pad 0 to Pad 63.

Detailed File Layout

Data Types:
Type Size (bits)
char 8
int 16

The file's format is little endian. Be aware of this fact when reading and writing int values. The values given in the "Value", "Min Value", and "Max Value" columns are given in big endian.

i = Pad Number (0 to 63)
j = Sample Number (0 to 3)
Header ###
Offset Length Description Type Value Min Value Max Value Notes
0x00 2 File size in bytes unsigned int 0x2A04 - -  
0x02 2 Padding char array 0x00 - -  
0x04 16 Filetype String char array "MPC1000 PGM 1.00" - -  
0x14 4 Padding char array 0x00 - -  
0x14 1 Padding char 0x00 - -  
0x15 1 Program Play char 0x00 0 1 0="Poly", 1="Mono"
0x16 2 Padding char array 0x00 - -  
Pad i, Sample j Data
Offset Length Description Type Value Min Value Max Value Notes
(i * 0xA4) + (j * 0x18) + 0x00 16 Sample Name char array - - - Value is the name of the wave file without the ".wav" extension assigned to this pad. Names shorter than 16 characters are null (0x00) padded.
(i * 0xA4) + (j * 0x18) + 0x10 1 Padding char 0x00 - -  
(i * 0xA4) + (j * 0x18) + 0x11 1 Level unsigned char - 0 100  
(i * 0xA4) + (j * 0x18) + 0x12 1 Range Lower unsigned char - 0 Range Upper  
(i * 0xA4) + (j * 0x18) + 0x13 1 Range Upper unsigned char - Range Lower 127  
(i * 0xA4) + (j * 0x18) + 0x14 2 Tuning int - -3600 3600 Value is 100 times larger than actual tuning
(i * 0xA4) + (j * 0x18) + 0x16 1 Play Mode char - 0 1 0="One Shot", 1="Note On"
(i * 0xA4) + (j * 0x18) + 0x17 1 Padding char 0x00 - -  
(i * 0xA4) + (j * 0x18) + 0x17 1 Velocity to Pitch unsigned char 0x00 0 100  
Pad i Data
Offset Length Description Type Value Min Value Max Value Notes
(i * 0xA4) + 0x60 2 Padding char array 0x00 - -  
(i * 0xA4) + 0x62 1 Voice Overlap char - 0 1 0="Poly", 1="Mono"
(i * 0xA4) + 0x63 1 Mute Group char - 0 32 0="Off", 1 to 32
(i * 0xA4) + 0x64 1 Padding char 0x00 - -  
(i * 0xA4) + 0x65 1 Unknown char 0x01 - -  
(i * 0xA4) + 0x66 1 Attack unsigned char 0x00 0x00 100  
(i * 0xA4) + 0x67 1 Decay unsigned char 0x05 0 100  
(i * 0xA4) + 0x68 1 Decay Mode char - 0 1 0="End", 1="Start"
(i * 0xA4) + 0x69 2 Padding char array 0x00 - -  
(i * 0xA4) + 0x69 1 Velocity to Attack unsigned char 0x00 0 100  
(i * 0xA4) + 0x6A 1 Velocity to Start unsigned char 0x00 0 100  
(i * 0xA4) + 0x6B 1 Velocity to Level unsigned char 0x64 0 100  
(i * 0xA4) + 0x6C 5 Padding char array 0x00 - -  
(i * 0xA4) + 0x71 1 Filter 1 Type char - 0 4 0="Off", 1="Lowpass", 2="Bandpass", 3="Highpass", 4="Lowpass 2"
(i * 0xA4) + 0x72 1 Filter 1 Freq unsigned char 0x64 0 100  
(i * 0xA4) + 0x73 1 Filter 1 Res unsigned char 0x00 0 100  
(i * 0xA4) + 0x74 4 Padding char array 0x00 - -  
(i * 0xA4) + 0x74 1 Filter 1 Envelope Time unsigned char 0x00 0 100  
(i * 0xA4) + 0x75 1 Filter 1 Envelope Amount char 0x00 -50 50  
(i * 0xA4) + 0x76 1 Filter 1 Velocity to Time char 0x00 -50 50  
(i * 0xA4) + 0x77 1 Filter 1 Velocity to Amount char 0x00 -50 50  
(i * 0xA4) + 0x78 1 Filter 1 Velocity to Frequency unsigned char - 0 100  
(i * 0xA4) + 0x79 1 Filter 2 Type char - 0 5 0="Off", 1="Lowpass", 2="Bandpass", 3="Highpass", 4="Lowpass 2", 5="Link"
(i * 0xA4) + 0x7A 1 Filter 2 Freq unsigned char - 0 100  
(i * 0xA4) + 0x7B 1 Filter 2 Res unsigned char - 0 100  
(i * 0xA4) + 0x7C 4 Padding char array 0x00 - -  
(i * 0xA4) + 0x7C 1 Filter 2 Envelope Time unsigned char 0x00 0 100  
(i * 0xA4) + 0x7D 1 Filter 2 Envelope Amount char 0x00 -50 50  
(i * 0xA4) + 0x7E 1 Filter 2 Velocity to Time char 0x00 -50 50  
(i * 0xA4) + 0x7F 1 Filter 2 Velocity to Amount char 0x00 -50 50  
(i * 0xA4) + 0x80 1 Filter 2 Velocity to Frequency unsigned char - 0 100  
(i * 0xA4) + 0x81 14 Padding char array 0x00 - -  
(i * 0xA4) + 0x81 1 Padding char array 0x00 - -  
(i * 0xA4) + 0x82 2 LFO Rate unsigned int 0x0000 00.00 99.00 means beat.tic, beat = 0 to 99, tic = 0 to 95, value = beat * 96 + tic
(i * 0xA4) + 0x84 2 LFO Delay unsigned int 0x0000 00.00 99.00 means beat.tic, beat = 0 to 99, tic = 0 to 95, value = beat * 96 + tic
(i * 0xA4) + 0x86 1 LFO Wave unsigned char 0x00 0 5 0="Triangle", 1="Sine", 2="Square", 3="Saw", 4="Saw Down", 5="Random"
(i * 0xA4) + 0x87 1 LFO Pitch unsigned char 0x00 0 100  
(i * 0xA4) + 0x88 1 LFO Filter 1 unsigned char 0x00 0 100  
(i * 0xA4) + 0x89 1 LFO Filter 2 unsigned char 0x00 0 100  
(i * 0xA4) + 0x8A 1 LFO Level unsigned char 0x00 0 100  
(i * 0xA4) + 0x8B 4 Padding char array 0x00 - -  
(i * 0xA4) + 0x8F 1 Mixer Level unsigned char 0x64 0 100  
(i * 0xA4) + 0x90 1 Mixer Pan unsigned char 0x32 0 100 0 to 49=Left, 50=Center, 51 to 100=Right
(i * 0xA4) + 0x91 1 Output char - 0 2 0="Stereo", 1="1-2", 2="3-4"
(i * 0xA4) + 0x92 1 FX Send char - 0 2 0="Off", 1="1", 2="2"
(i * 0xA4) + 0x93 1 FX Send Level unsigned char 0x21 0 100  
(i * 0xA4) + 0x94 1 Filter Attenuation char - 0 2 0="0dB", 1="-6dB", 2="-12dB"
(i * 0xA4) + 0x95 15 Padding char array 0x00 - -  
(i * 0xA4) + 0x95 2 Padding char array 0x00 - -  
(i * 0xA4) + 0x97 4 Mute Target 1 to 4 char array 0x00 0 64 0="Off", 1="Pad A01", 2="Pad A02", to 64="Pad D16"
(i * 0xA4) + 0x9B 9 Padding char array 0x00 - -  
MIDI/Slider Data
Offset Length Description Type Value Min Value Max Value Notes
m + 0x2918 1 Pad MIDI Note Values unsigned char - 0 127 m=Pad Number (0 to 63). Value of character is the MIDI note number associated with Pad Number m
n + 0x2958 1 MIDI Note Pad Values unsigned char - 0 64 n=MIDI Note Number (0 to 127). Value is the Pad Number (0 to 63) associated with the MIDI note number, n. Value is 64 for unassigned MIDI Note Numbers.
0x29D8 1 MIDI Program Change unsigned char - 0 128 0="Off", 1 to 128
0x29D9 1 Slider 1 Pad char 0x00 0 64 0="Off", 1="A01", 2="A02", to 64="D16"
0x29DA 1 Unknown char 0x01 - -  
0x29DA 1 Slider 1 Change char 0x01 0 1 0="Real Time", 1="Note On"
0x29DB 1 Slider 1 Parameter char - 0 11 or 4 Selectable with "Real Time": 0="Tune", 1="Cutoff 1+2", 5="Level", 6="Cutoff 1", 7="Cutoff 2", 8="Reso 1+2", 9="Reso 1", 10="Reso 2", 11="Pan";
selectable with "Note On": 0="Tune", 1="Filter", 2="Layer", 3="Attack", 4="Decay"
0x29DC 1 Slider 1 Tune Low char - -120 Slider 1 Tune High  
0x29DD 1 Slider 1 Tune High char - Slider 1 Tune Low 120  
0x29DE 1 Slider 1 Filter Low char - -50 Slider 1 Filter High  
0x29DF 1 Slider 1 Filter High char - Slider 1 Filter Low 50  
0x29E0 1 Slider 1 Layer Low char - 0 Slider 1 Layer High  
0x29E1 1 Slider 1 Layer High char - Slider 1 Layer Low 127  
0x29E2 1 Slider 1 Attack Low char - 0 Slider 1 Attack High  
0x29E3 1 Slider 1 Attack High char - Slider 1 Attack Low 100  
0x29E4 1 Slider 1 Decay Low char - 0 Slider 1 Decay High  
0x29E5 1 Slider 1 Decay High char - Slider 1 Decay Low 100  
0x29E6 1 Slider 2 Pad unsigned char 0x00 0 64 0="Off", 1="A01", 2="A02", to 64="D16"
0x29E7 1 Unknown char 0x01 - -  
0x29E7 1 Slider 2 Change char 0x01 0 1 0="Real Time", 1="Note On"
0x29E8 1 Slider 2 Parameter char - 0 11 or 4 Selectable with "Real Time": 0="Tune", 1="Cutoff 1+2", 5="Level", 6="Cutoff 1", 7="Cutoff 2", 8="Reso 1+2", 9="Reso 1", 10="Reso 2", 11="Pan";
selectable with "Note On": 0="Tune", 1="Filter", 2="Layer", 3="Attack", 4="Decay"
0x29E9 1 Slider 2 Tune Low char - -120 Slider 2 Tune High  
0x29EA 1 Slider 2 Tune High char - Slider 2 Tune Low 120  
0x29EB 1 Slider 2 Filter Low char - -50 Slider 2 Filter High  
0x29EC 1 Slider 2 Filter High char - Slider 2 Filter Low 50  
0x29ED 1 Slider 2 Layer Low char - 0 Slider 2 Layer High  
0x29EE 1 Slider 2 Layer High char - Slider 2 Layer Low 127  
0x29EF 1 Slider 2 Attack Low char - 0 Slider 2 Attack High  
0x29F0 1 Slider 2 Attack High char - Slider 2 Attack Low 100  
0x29F1 1 Slider 2 Decay Low char - 0 Slider 2 Decay High  
0x29F2 1 Slider 2 Decay High char - Slider 2 Decay Low 100  
0x29F3 17 Padding char array 0x00 - -  
0x29F3 1 Slider 1 Level Low char 0x00 0 Slider 1 Level High  
0x29F4 1 Slider 1 Level High char 0x64 Slider 1 Level Low 100  
0x29F5 1 Slider 2 Level Low char 0x00 0 Slider 2 Level High  
0x29F6 1 Slider 2 Level High char 0x64 Slider 2 Level Low 100  
0x29F7 13 Padding char array 0x00 - -