enharmonic
/ controller build
← prototype it first

build reference · usb midi control surface

four decks,
nothing hidden

A DIY USB-MIDI controller on a CDJ footprint, designed to sit on a decksaver in a booth. Every deck control is always live — no deck-switch button, no shift layers, no menu diving. Library, transport, loops, dual FX, 3-band EQ with stem-isolation switching, filter, gain and channel faders, for all four decks at once. Around $290 in parts.

4
decks, always live
40
potentiometers
5
encoders
~$290
in parts
01

the premise

Commercial controllers bank four decks onto two sets of controls, so half your rig is always invisible. This one trades portability for the opposite: every control for every deck, permanently under your hands.

No deck switching

Deck 3's low EQ lives in one physical place all night. In a dark booth that's worth more than any feature.

EQ or stems, per deck

A toggle per channel flips the three EQ knobs between standard 3-band and stem isolation. Same knobs, different CC numbers.

No audio inside

Control surface only. Audio is a separate interface on the same hub — if one fails, you swap that one thing.

Booth-shaped

320 × 415mm, the CDJ-3000 footprint, ~45mm tall. It sits on a decksaver over a deck you aren't using.

What it deliberately doesn't do: output audio, or replace a jog wheel for scratching. The per-deck encoders are for scrubbing and needle-search, not turntablism.

02

the surface

Four identical vertical strips. Library across the top, then per-deck transport and loops, then FX, then the mixer section — gain, EQ, filter, fader — reading top to bottom the way a channel strip does.

library
transport · loops
fx 1 · fx 2
mixer · gain · eq|stems · filter
deck 1
deck 2
deck 3
deck 4
320 × 415 mm · CDJ-3000 footprint · ~45 mm tall
03

control inventory

Ninety-nine controls total. The count is what drives every other decision in the build — multiplexing, matrix size, microcontroller choice.

controltypeper decktotal
Browseencoder, push1
Back / Sortbutton2
Loadbutton14
Jog / scrubencoder14
Sync · Cue · Playbutton312
Loop in · out · exit · ×2 · ÷2button520
FX 1 & 2 — wet/dry + parampot416
Gainpot14
EQ ↔ stemsSPDT toggle14
High · Mid · Low (or vocals · drums · bass)pot312
Filterpot14
Channel fader45mm slide pot14
total40 pots · 5 encoders · 38 buttons · 4 switches87
04

the brain

A Teensy 4.1 — chosen for native class-compliant USB MIDI and enough I/O headroom for analog multiplexing plus a button matrix.

specteensy 4.1
CPU600 MHz ARM Cortex-M7
Digital I/O55 pins
Analog inputs18 pins
USB MIDInative, class-compliant
Price~$27

The iPad gotcha

In the Arduino IDE, set Tools → USB Type → "MIDI". Not "Serial + MIDI" — iOS refuses to enumerate the composite device, and you'll waste an afternoon assuming the cable is bad. Power everything through a powered USB-C hub (PD 45W+) so the Teensy and audio interface draw independently.

reading 40 pots on 3 pins

Three CD4067 16-channel analog multiplexers share four address lines and report into three analog inputs. Thirty-eight buttons go on a 6×7 scan matrix with a 1N4148 per switch to stop ghosting. LEDs run off two 74HC595 shift registers — sixteen outputs from three pins.

// shared address lines, three mux signal pins
S0=2  S1=3  S2=4  S3=5
muxA→A0   muxB→A1   muxC→A2

// button matrix
rows 24-29 (output, active LOW)
cols 30-36 (INPUT_PULLUP)

Use 3.3V as the analog reference throughout — not 5V. The Teensy 4.x analog pins are not 5V tolerant.

05

midi map

One MIDI channel per deck, identical CC numbers across all four. The same convention the software prototype uses — so a mapping built on a touchscreen drives this board unchanged.

controlmessageeq modestem mode
GainCC 7gaingain
Knob 1CC 10 / 30EQ highvocals
Knob 2CC 11 / 31EQ middrums
Knob 3CC 12 / 32EQ lowbass
FilterCC 13HP/LP sweep, centre flat
FaderCC 14channel volume
FX 1/2 wet + paramCC 20–23per FX unit
JogCC 24 rel.3Fh / 41h encoding
Sync · Cue · PlayNote 48 · 50 · 52transport
Loop in/out/exit/×2/÷2Note 53–60loop section

How the mode switch works

The toggle doesn't change the knobs — it changes what the firmware sends. In EQ position the three knobs emit CC 10/11/12; flipped, the same knobs emit CC 30/31/32. Your DJ software learns both sets once, and one physical switch swaps a whole channel strip between tone control and stem isolation.

Encoders are relative

Jog and browse send 65 (0x41) for clockwise and 63 (0x3F) for counter-clockwise, not absolute positions. Absolute encoders on an endless control feel wrong immediately and mislead every judgement you make about the layout.

06

bill of materials

Roughly $290 all in. Knobs and pots are over a third of it — buy those last, once the layout is settled.

categorynotable partscost
Microcontroller & muxTeensy 4.1, 3× CD4067, 2× 74HC595$46.55
Pots, faders & knobs36× B10K, 4× 45mm slide, caps$95.20
Encoders & knobs5× PEC11R with push$27.50
Switches & buttons38× tactile, 4× SPDT, 42× 1N4148$12.96
LEDs16× 3mm + resistors$2.08
EnclosurePETG tray, 3mm acrylic panel, standoffs$71.00
Wiring & misc22 AWG, headers, perfboard, heatshrink$35.00
total~$290

Prototype first — about $59

Teensy 4.1, one CD4067 with breakout, two encoders, four pots, eight tactile buttons, breadboard and wire. Enough to prove mux reads, matrix scanning, and that your DJ software sees the device — before you commit to 36 more knobs.

enclosure

3D-printed PETG base tray holding the boards, with a laser-cut 3mm acrylic top panel on M3 brass standoffs, screwed from underneath. Rear-facing recessed USB cutout. Large adhesive rubber feet so it doesn't slide on the decksaver. Label by laser-engraving the acrylic, or a vinyl overlay in gold to match.

07

build order

Four phases, each one answering a question before the next spends money on it.

phasewhatquestion it answers
01 · breadboardTeensy + 1 mux + 2 encoders + 4 pots + 8 buttonsDoes the host see it, and do mux reads and matrix scanning work?
02 · full buildAll 40 pots, 38 buttons, 5 encoders, 4 switches on perfboardDoes it hold up as one circuit, at full I/O count?
03 · mappingMIDI-learn every control; both EQ and stem modesIs the map complete and exportable?
04 · gig-readyTwo-hour stress test, pot curves, labels, timed setupCan you set it up in under five minutes, in the dark?

Do phase 03 before you own the hardware

The mapping is the slowest phase and it doesn't need the board. Emit the same channels and CC numbers from a touchscreen surface and the mapping is finished before phase 01 starts. How that works →

enharmonic · lab

A design, not a finished object — specced to the point where the next step is ordering parts. Published in the state it's actually in, gaps included.