Extract per‑track stems (WAV) from Akai MPC XPJ project files.
node mpc-stems/cli.js ./MyProject.xpj
↓
stems-MyProject/
├── kick.wav
├── snare.wav
├── hat.wav
└── ...
Reads an .xpj project file (gzip‑compressed JSON with an ACVS header), parses the sequence data and instrument assignments, loads the matching WAV files from the _[ProjectData] folder, and renders each track with note events to a separate 24‑bit stereo WAV.
All processing is local — zero network requests.
mpc-stems <xpj-file> [options]
| Argument | Description |
|---|---|
<xpj-file> |
Path to the .xpj project file |
| Option | Description |
|---|---|
--out <dir> |
Output directory (default: stems-<project-name> next to the XPJ) |
--data <dir> |
Explicit path to the _[ProjectData] folder |
--bpm <number> |
Override project BPM |
--help, -h |
Show help |
# Basic — auto-detect _[ProjectData], output to ./stems-MyProject/
node mpc-stems/cli.js ~/Desktop/MyProject.xpj
# Custom output directory
node mpc-stems/cli.js ~/Desktop/MyProject.xpj --out ~/Desktop/stems
# Explicit data folder
node mpc-stems/cli.js ~/Desktop/MyProject.xpj --data ~/Desktop/MyProject_[ProjectData]| Render feature | Status |
|---|---|
| Per‑track stem WAV files | ✅ |
| Volume per pad | ✅ |
| Pan (equal‑power) | ✅ |
| Pitch tuning (coarse + fine) | ✅ |
| One‑shot samples (full duration) | ✅ |
16 Levels per‑note pitch variation (modifierActiveState0 + Tuning (coarse/fine)) |
✅ |
| Song mode (sequenced arrangement with repeats) | ✅ |
| Note velocity | ✅ |
- Amp envelopes (attack/decay/release)
- Filters (lowpass/highpass)
- Mute groups / choke
- Slice/chop regions
- Export to MP3
An .xpj file is gzip‑compressed JSON with a 5‑line ASCII header:
ACVS
<version>
SerialisableProjectData
json
<platform>
<JSON payload>
The JSON contains data.tracks[] with drum/keygroup programs, data.sequences[] with note events, and data.songs[] for song‑mode arrangement.
The _[ProjectData] folder sits alongside the .xpj file and contains the WAV/AIFF samples referenced by the project.
Only commander for CLI argument parsing. Audio processing uses Node.js built‑ins (zlib, fs, path).
MIT