MPC-Pi

The Akai MPC2000XL, MPC3000 and MPC60 — running their original firmware through a focused MAME build, tuned for low-latency play on Linux.

Downloads

mpcpi-20260819-036b689-linux-x86_64.tar.gz
15236322 bytes
mpcpi-20260819-036b689-linux-x86_64.tar.gz.sha256
109 bytes
mpcpi-20260819-8329a2f-linux-x86_64.tar.gz
15230595 bytes
mpcpi-20260819-8329a2f-linux-x86_64.tar.gz.sha256
109 bytes
mpcpi-20260819-a394edd-linux-x86_64.tar.gz
15233956 bytes
mpcpi-20260819-a394edd-linux-x86_64.tar.gz.sha256
109 bytes
mpcpi-20260819-c1297dd-linux-x86_64.tar.gz
15237068 bytes
mpcpi-20260819-c1297dd-linux-x86_64.tar.gz.sha256
109 bytes
mpcpi-20260820-1ac56d9-windows-x86_64.zip
14988441 bytes
mpcpi-20260820-1ac56d9-windows-x86_64.zip.sha256
108 bytes
mpcpi-20260820-e8c84f6-windows-x86_64.zip
14969595 bytes
mpcpi-20260820-e8c84f6-windows-x86_64.zip.sha256
108 bytes

Verify with sha256sum -c *.sha256 after downloading. Linux x86-64 (PipeWire audio) and Windows 10/11 x86-64 (stock MAME audio; the audio-clock pacing port is the planned follow-up). ROMs are not included and never will be.

What this is

A dedicated MAME build containing only the Akai machines, carrying this project's ordered stack of 52 measured patches: an audio-clocked PipeWire backend that paces emulation from the sound card, event-driven panel and MIDI UARTs, and V53 fast paths that keep the machine's timing while taking it from ~11% of one core to hundreds of percent of real time. The result boots the actual MPC firmware, loads real floppy projects, samples, and sequences — with a 32-frame (~0.7 ms) audio quantum.

The panel on screen is the complete MPC2000XL front panel: buttons are clickable, the pads respond, and the knobs and sliders are mouse-controlled through the bundled layout plugin.

Quick start

tar -xzf mpcpi-*-linux-x86_64.tar.gz
cd mpcpi-*/
cp /path/to/your/mpc2000xl.zip roms/     # your own legally dumped ROMs
./mpcpi                                  # play
./mpcpi -flop myproject.img              # with a floppy project

Other machines: ./mpcpi-accurate mpc3000, ./mpcpi-accurate mpc60. If your user holds no realtime scheduling rlimit: MAME_RT_PRIORITY=0 ./mpcpi. On a hybrid P/E-core CPU, pin to the P-cores for the tuned latency: MAME_CPUSET=0-11 ./mpcpi.

Pad controllers

Any class-compliant USB-MIDI pad controller (Akai MPD18, MPD218, …) becomes the MPC's own pads — not its MIDI input — through the low-latency internal-pads path:

./mpcpi -listmidi                            # find your controller's port
MPC_MIDI_INPUT_MODE=internal-pads \
  ./mpcpi -midiin1 'PORT NAME' -flop myproject.img
MIDIBecomesNotes
Notes 36–51Pads 1–16 (bank A) Note-on velocity is pad velocity
CC 1DATA wheel Relative: 3 = three clicks up, 125 = three down
CC 2NOTE VARIATION slider Absolute 0–127

Maschine MK1 as the front panel

Experimental on desktop. This is the appliance's proven configuration — both MK1 screens, lamps, pads and encoders driven by the bundled hub — but the desktop wiring is new and not yet hardware-verified.

sudo modprobe snd-virmidi
sudo setfacl -m u:$USER:rw /dev/snd/midiC*D0
./mpcpi-maschine

Speed vs. accuracy

./mpcpi enables every accepted fast path — the ones whose PCM output and event timing are measured identical to the accurate implementation. The panel runs the accurate path by default: the faster event-driven panel UART still ghosts occasional button presses on desktop, so the bundle stays on the accurate one until that is fixed. ./mpcpi-accurate gives you the stock reference paths everywhere. The project's measurements live in its repository.