guide

Building an MPC drum kit from a folder of samples

What a .xpm program actually contains, how pad A01 maps to instrument 1, and why a kit can load with silent pads.

An MPC kit is not a folder. It is a program — an .xpm file — that names the samples it wants and says which pad plays which. Get the .xpm right and a kit loads in one press. Get it subtly wrong and the kit loads, looks correct, and several pads are silent.

This is what is actually in the file, and what goes wrong.

What an .xpm is

XML. A Drum program for MPC OS 3.x is a single .xpm file describing 128 instruments, each with 8 layers, plus a <PadNoteMap> that maps physical pads to MIDI notes. A 16-pad kit uses the first 16 instruments and leaves the other 112 empty — they still have to be present, which is why an .xpm is a large file for what it expresses.

It sits in a folder with the WAVs it references:

MyKit/
  MyKit.xpm
  01-kick.wav
  02-snare.wav
  …

The program names samples; the folder supplies them. Move the .xpm out of its folder and the kit is empty.

Pad numbering is bottom-up

The thing that catches everyone. On the MPC, pad A01 is the bottom-left pad, and it is instrument number 1. Pad A16 is top-right.

Every on-screen grid you build a kit in — including ours — is laid out top-down, because that is how grids are drawn. So the visual index and the instrument number are not the same number, and if you map them naively your kit arrives with the rows flipped: your kick on the top row, your hats at the bottom, everything playable but wrong under the fingers.

Convert deliberately, in one function, with a test. It is four lines and it is the difference between a kit that feels right and one that does not.

Referencing the samples

Two fields decide whether a pad makes a sound, and the safe combination is not the obvious one:

  • SampleName — the base name, without the .wav extension.
  • SampleFile — leave it empty.
  • SampleEnd — leave it 0.

With SampleFile empty, the MPC resolves <SampleName>.wav relative to the .xpm's own folder. That is what you want: the kit stays portable, and it survives being copied to an SD card at a different path. An absolute path baked into SampleFile works on the machine that wrote it and nowhere else.

SampleEnd of 0 tells the MPC to detect the length itself. A wrong non-zero end is the classic silent pad — the sample is loaded, the program is valid, and the playback range is empty.

Layers

Each instrument has 8 layers, for velocity switching and round-robins. A simple drum kit fills Layer 1 and leaves layers 2–8 empty. They still have to exist in the XML.

Writing one

Do not generate the XML from a mental model of the schema. Take a real program off a real machine — save an empty Drum program from MPC OS on the hardware, open it, and use that as the template. Fill in the Layer-1 SampleName for the pads you are using and change nothing else.

Two details that matter and are invisible:

  • Line endings are CRLF. The MPC's own files use them.
  • Keep <PadNoteMap> exactly as the machine wrote it. It is not interesting, and regenerating it is a good way to break note mapping for no benefit.

The failure modes, in the order you will hit them

  1. Rows flipped. Visual grid index used as the instrument number. See above.
  2. Silent pads. SampleEnd left at a wrong non-zero value, or SampleFile holding a path that does not exist on this machine.
  3. Empty kit. The .xpm was moved away from its WAVs.
  4. Loads but plays nothing in the default mode. Worth knowing: a program can be structurally valid and still be inaudible in the MPC's default Pad mode because of how the instrument was configured. Test on hardware; "the XML parses" is not the test.

That last point is the general lesson. There is no validator for this format that means anything. Load the kit on the machine. We found a silent-pad bug that way that no amount of structural validation against a reference program had caught.

The sample files themselves

  • 44.1 kHz, 16-bit, WAV. The MPC will take more, and there is no reason to give it more for drums.
  • Trim the head. A few milliseconds of silence before the transient is latency you can hear when you play the pad.
  • Name the files with the pad number first — 01-kick.wav, 02-snare.wav. The program does not care, but you will when you are looking at the folder on a card.

WeaveTone builds the program and the WAV copies together: a per-pad category template, one press to fill it from your own library, trim in place, export a real .xpm to a folder or straight to the SD card. See what it does or get the macOS build.

← All guides