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.
Send me an e-mail at [email protected] if you have any questions or comments.
Take a look at my other projects!
Download sample MPC 1000 file loading and exporting Python code from
https://github.com/stephenn/pympc1000.
Header |
Pad 0 Sample 0 |
Pad 0 Sample 1 |
Pad 0 Sample 2 |
Pad 0 Sample 3 |
Pad 0 |
Pad 1 Sample 0 |
Pad 1 Sample 1 |
Pad 1 Sample 2 |
Pad 1 Sample 3 |
Pad 1 |
. . . |
Pad 63 Sample 0 |
Pad 63 Sample 1 |
Pad 63 Sample 2 |
Pad 63 Sample 3 |
Pad 63 |
MIDI |
Slider 0 |
Slider 1 |
Footer |
The MPC 1000 PGM file format has five sections: Header, Sample and Pad, MIDI, Slider, and Footer.
Up to four samples can be assigned to each of the sixty-four pads.
All file values are encoded as little-endian 2's complement or ASCII.
Symbol Definitions:
Symbol | Description | Range |
---|---|---|
p | Pad number | 0 – 63 |
s | Sample number | 0 – 3 |
n | MIDI note number | 0 – 127 |
r | Slider number | 0 – 1 |
Header:
Offset | Size | Description | Type | Value | Min Value | Max Value | Notes |
---|---|---|---|---|---|---|---|
0x00 | 2 | File size in bytes | uint_16 | 0x2A04 | – | – | |
0x02 | 2 | Padding | – | 0x00 | – | – | |
0x04 | 16 | Filetype String | int_8 array | "MPC1000 PGM 1.00" | – | – | |
0x14 | 4 | Padding | – | 0x00 | – | – |
Sample Data:
Offset | Size | Description | Type | Value | Min Value | Max Value | Notes |
---|---|---|---|---|---|---|---|
(p * 0xA4) + (s * 0x18) + 0x00 | 16 | Sample Name | int_8 array | – | – | – | Extensionless name of assigned sample file. ASCII, right-padded to 16 bytes with 0x00. Only space, alphanumeric characters, and !#$%&'()-@_{} are valid. |
(p * 0xA4) + (s * 0x18) + 0x10 | 1 | Padding | – | 0x00 | – | – | |
(p * 0xA4) + (s * 0x18) + 0x11 | 1 | Level | uint_8 | – | 0 | 100 | |
(p * 0xA4) + (s * 0x18) + 0x12 | 1 | Range Lower | uint_8 | – | 0 | Range Upper | |
(p * 0xA4) + (s * 0x18) + 0x13 | 1 | Range Upper | uint_8 | – | Range Lower | 127 | |
(p * 0xA4) + (s * 0x18) + 0x14 | 2 | Tuning | int_16 | – | -3600 | 3600 | Tuning in cents (1 semitone = 100 cents) |
(p * 0xA4) + (s * 0x18) + 0x16 | 1 | Play Mode | int_8 | – | 0 | 1 | 0="One Shot", 1="Note On" |
(p * 0xA4) + (s * 0x18) + 0x17 | 1 | Padding | – | 0x00 | – | – |
Pad Data:
Offset | Size | Description | Type | Value | Min Value | Max Value | Notes |
---|---|---|---|---|---|---|---|
(p * 0xA4) + 0x60 | 2 | Padding | – | 0x00 | – | – | |
(p * 0xA4) + 0x62 | 1 | Voice Overlap | int_8 | – | 0 | 1 | 0="Poly", 1="Mono" |
(p * 0xA4) + 0x63 | 1 | Mute Group | int_8 | – | 0 | 32 | 0="Off", 1 to 32 |
(p * 0xA4) + 0x64 | 1 | Padding | – | 0x00 | – | – | |
(p * 0xA4) + 0x65 | 1 | Unknown | int_8 | 0x01 | – | – | |
(p * 0xA4) + 0x66 | 1 | Attack | uint_8 | – | 0 | 100 | |
(p * 0xA4) + 0x67 | 1 | Decay | uint_8 | – | 0 | 100 | |
(p * 0xA4) + 0x68 | 1 | Decay Mode | int_8 | – | 0 | 1 | 0="End", 1="Start" |
(p * 0xA4) + 0x69 | 2 | Padding | – | 0x00 | – | – | |
(p * 0xA4) + 0x6B | 1 | Velocity to Level | uint_8 | – | 0 | 100 | |
(p * 0xA4) + 0x6C | 5 | Padding | – | 0x00 | – | – | |
(p * 0xA4) + 0x71 | 1 | Filter 1 Type | int_8 | – | 0 | 3 | 0="Off", 1="Lowpass", 2="Bandpass", 3="Highpass" |
(p * 0xA4) + 0x72 | 1 | Filter 1 Freq | uint_8 | – | 0 | 100 | |
(p * 0xA4) + 0x73 | 1 | Filter 1 Res | uint_8 | – | 0 | 100 | |
(p * 0xA4) + 0x74 | 4 | Padding | – | 0x00 | – | – | |
(p * 0xA4) + 0x78 | 1 | Filter 1 Velocity to Frequency | uint_8 | – | 0 | 100 | |
(p * 0xA4) + 0x79 | 1 | Filter 2 Type | int_8 | – | 0 | 4 | 0="Off", 1="Lowpass", 2="Bandpass", 3="Highpass", 4="Link" |
(p * 0xA4) + 0x7A | 1 | Filter 2 Freq | uint_8 | – | 0 | 100 | |
(p * 0xA4) + 0x7B | 1 | Filter 2 Res | uint_8 | – | 0 | 100 | |
(p * 0xA4) + 0x7C | 4 | Padding | – | 0x00 | – | – | |
(p * 0xA4) + 0x80 | 1 | Filter 2 Velocity to Frequency | uint_8 | – | 0 | 100 | |
(p * 0xA4) + 0x81 | 14 | Padding | – | 0x00 | – | – | |
(p * 0xA4) + 0x8F | 1 | Mixer Level | uint_8 | – | 0 | 100 | |
(p * 0xA4) + 0x90 | 1 | Mixer Pan | uint_8 | – | 0 | 100 | 0 to 49=Left, 50=Center, 51 to 100=Right |
(p * 0xA4) + 0x91 | 1 | Output | int_8 | – | 0 | 2 | 0="Stereo", 1="1-2", 2="3-4" |
(p * 0xA4) + 0x92 | 1 | FX Send | int_8 | – | 0 | 2 | 0="Off", 1="1", 2="2" |
(p * 0xA4) + 0x93 | 1 | FX Send Level | uint_8 | – | 0 | 100 | |
(p * 0xA4) + 0x94 | 1 | Filter Attenuation | int_8 | – | 0 | 2 | 0="0dB", 1="-6dB", 2="-12dB" |
(p * 0xA4) + 0x95 | 15 | Padding | – | 0x00 | – | – |
MIDI Data:
Offset | Size | Description | Type | Value | Min Value | Max Value | Notes |
---|---|---|---|---|---|---|---|
0x2918 + p | 1 | Pad MIDI Note Values | uint_8 | – | 0 | 127 | MIDI note number associated with pad number, p (0 to 63) |
0x2958 + n | 1 | MIDI Note Pad Values | uint_8 | – | 0 | 64 | Pad number (0 to 63) associated with the MIDI note number, n (0 to 127). Unassigned MIDI note numbers are padded with 64, an out-of-range pad number. |
0x29D8 | 1 | MIDI Program Change | uint_8 | – | 0 | 128 | 0="Off", 1 to 128 |
Slider Data:
Offset | Size | Description | Type | Value | Min Value | Max Value | Notes |
---|---|---|---|---|---|---|---|
(r * 0x0D) + 0x29D9 | 1 | Slider r Pad | uint_8 | – | 0 | 63 | |
(r * 0x0D) + 0x29DA | 1 | Unknown | int_8 | 0x01 | – | – | |
(r * 0x0D) + 0x29DB | 1 | Slider r Parameter | int_8 | – | 0 | 4 | 0="Tune", 1="Filter", 2="Layer", 3="Attack", 4="Decay" |
(r * 0x0D) + 0x29DC | 1 | Slider r Tune Low | int_8 | – | -120 | Slider r Tune High | |
(r * 0x0D) + 0x29DD | 1 | Slider r Tune High | int_8 | – | Slider r Tune Low | 120 | |
(r * 0x0D) + 0x29DE | 1 | Slider r Filter Low | int_8 | – | -50 | Slider r Filter High | |
(r * 0x0D) + 0x29DF | 1 | Slider r Filter High | int_8 | – | Slider r Filter Low | 50 | |
(r * 0x0D) + 0x29E0 | 1 | Slider r Layer Low | int_8 | – | 0 | Slider r Layer High | |
(r * 0x0D) + 0x29E1 | 1 | Slider r Layer High | int_8 | – | Slider r Layer Low | 127 | |
(r * 0x0D) + 0x29E2 | 1 | Slider r Attack Low | int_8 | – | 0 | Slider r Attack High | |
(r * 0x0D) + 0x29E3 | 1 | Slider r Attack High | int_8 | – | Slider r Attack Low | 100 | |
(r * 0x0D) + 0x29E4 | 1 | Slider r Decay Low | int_8 | – | 0 | Slider r Decay High | |
(r * 0x0D) + 0x29E5 | 1 | Slider r Decay High | int_8 | – | Slider r Decay Low | 100 |
Footer Data:
Offset | Size | Description | Type | Value | Min Value | Max Value | Notes |
---|---|---|---|---|---|---|---|
0x29F3 | 17 | Padding | – | 0x00 | – | – |
The MPC 1000 PGM file format is documented below using Python struct module format strings.
header = ( '<' # Little-endian 'H' # File size '2x' # Padding '16s' # "MPC1000 PGM 1.00" '4x' # Padding ) sample = ( '<' # Little-endian '16s' # Sample Name 'x' # Padding 'B' # Level 'B' # Range Upper 'B' # Range Lower 'h' # Tuning 'B' # Play Mode (0="One Shot", 1="Note On") 'x' # Padding ) pad = ( '<' # Little-endian '2x' # Padding 'b' # Voice Overlap (0="Poly", 1="Mono") 'b' # Mute Group (0="Off", 1 to 32) 'x' # Padding 'B' # Unknown 'B' # Attack 'B' # Decay 'B' # Decay Mode (0="End", 1="Start") '2x' # Padding 'B' # Velocity to Level '5x' # Padding 'b' # Filter 1 Type (0="Off", 1="Lowpass", 2="Bandpass", 3="Highpass") 'B' # Filter 1 Freq 'B' # Filter 1 Res '4x' # Padding 'B' # Filter 1 Velocity to Frequency 'B' # Filter 2 Type (0="Off", 1="Lowpass", 2="Bandpass", 3="Highpass", 4="Link") 'B' # Filter 2 Freq 'B' # Filter 2 Res '4x' # Padding 'B' # Filter 2 Velocity to Frequency '14x' # Padding 'B' # Mixer Level 'B' # Mixer Pan (0 to 49=Left, 50=Center, 51 to 100=Right) 'B' # Output (0="Stereo", 1="1-2", 2="3-4") 'B' # FX Send (0="Off", 1="1", 2="2") 'B' # FX Send Level 'B' # Filter Attenuation (0="0dB", 1="-6dB", 2="-12dB") '15x' # Padding ) midi = ( '<' # Little-endian '64B' # Pad MIDI note mapping '128B' # MIDI note pad mapping 'B' # MIDI Program Change (0="Off", 1 to 128) ) slider = ( '<' # Little-endian 'B' # Slider Pad 'B' # Unknown 'B' # Slider Parameter (0="Tune", 1="Filter", 2="Layer", 3="Attack", 4="Decay") 'b' # Slider Tune Low 'b' # Slider Tune High 'b' # Slider Filter Low 'b' # Slider Filter High 'B' # Slider Layer Low 'B' # Slider Layer High 'B' # Slider Attack Low 'B' # Slider Attack High 'B' # Slider Decay Low 'B' # Slider Decay High ) footer = ( '<' # Little-endian '17x' # Padding )