Loopy Pro Controller

A CircuitPython MIDI controller for Loopy Pro — built from the class hardware kit.

A small custom controller that triggers clips in Loopy Pro over USB MIDI. Tap a button to start or stop a clip; long-press the same button to clear it. The LED on the button follows what Loopy Pro is actually doing, so the controller and the app stay in sync. The slider sends a CC you can map to volume or any parameter you like.

The example Loopy Pro project: Drums, Mic, Guitar, Keys clips in their default colors
The example project — four clips, one per NeoKey button, in Loopy Pro's default clip colors.
Example Loopy Pro project

Loopy Simple Controller.lpproj is included in this folder. Open it in Loopy Pro 2.0 to start with the four clips already laid out and bound to CCs 20–23. If you'd rather build it yourself, the walkthrough below shows every step.

The firmware is loopy_simple.py — four clips in one row, each NeoKey triggers one clip, the slider sends one CC.

Hardware

The same class kit used by every other example:

Installation

  1. Copy loopy_simple.py to your CIRCUITPY/ drive as code.py.
  2. Copy loopy_sprites.bmp alongside it. (This is the screen graphic.)
  3. Make sure your lib/ folder has the Adafruit libraries the file imports: adafruit_simplemath, adafruit_seesaw, adafruit_neokey, adafruit_midi, adafruit_imageload.
  4. Make sure USB MIDI is enabled in your boot.py — see the Adafruit guide.

MIDI mapping

Default CC assignments (Control Change numbers 20–23 are unassigned in the MIDI spec, so they're safe to use for custom controllers):

Control CC Loopy Pro clip color
Button 0 (Drums)20orange
Button 1 (Mic)21yellow
Button 2 (Guitar)22lime
Button 3 (Keys)23blue
Slider7(Volume)

ON / OFF events

Following the convention from the Loopy Pro wiki:

Pressing a button sends ON; releasing sends OFF. Loopy Pro echoes the same CC back when a clip starts (ON) or stops (OFF) — that's what lights up the corresponding NeoKey.

Setting up the mapping in Loopy Pro 2.0

If you opened the included Loopy Simple Controller.lpproj, everything below is already done — you can skip ahead to What the lights and screen show. Otherwise, here's how to build the same mapping yourself.

1. Plug the controller in

Loopy Pro picks up USB MIDI devices automatically — no settings dialog needed.

2. Enter MIDI Learn mode

Tap the hamburger icon in the upper right and choose MIDI Learn. A MIDI Learn panel appears along the bottom of the screen and the title bar changes to MIDI Learn.

The hamburger menu in the upper right with MIDI Learn highlighted
Hamburger icon (upper right) → MIDI Learn.

3. Map Play/Stop to the button's On message

Tap the first clip. Choose the Play/Stop action. In the binding panel set Action to Toggle — one tap starts the clip, the next tap stops it. Then press the matching NeoKey button briefly. Loopy Pro learns the binding as CC 20, On (the controller's ON event = CC value 127).

Play/Stop binding panel showing Action set to Toggle and source binding CC 20 On
Play/Stop with Action: Toggle bound to CC 20, On. The bottom row shows the source MIDI message Loopy Pro learned from the controller.

4. Add a second action: Clear Clip on Hold

Still in the same clip's bindings, add a new action and pick Clear Clip from the list. This time, instead of tapping the NeoKey button, press and hold it. Loopy Pro detects that the ON didn't release quickly and learns the binding as Hold CC 20. Now a tap toggles play, and a long-press of the same button clears the clip — two actions on one button.

Actions list with Play/Stop already bound to CC 20 On and Clear Clip bound to Hold CC 20
The Actions list. Play/Stop is already bound to CC 20, On; Clear Clip will be bound to Hold CC 20.
Clear Clip binding panel showing source Hold CC 20
Clear Clip bound to a Hold of CC 20. Tap = toggle play; hold = clear.

5. Repeat for the other three clips

Mic uses CC 21, Guitar CC 22, Keys CC 23. For each clip, do steps 3 and 4: Play/Stop on the On event, Clear Clip on the Hold event. Feedback (the CC echoed back to light up the NeoKey when the clip plays or stops) is sent automatically — no extra option to enable.

6. Map the slider

Still in MIDI Learn mode, tap the master volume fader (or any knob you want) and move the slider on the controller. Loopy Pro learns CC 7.

7. Exit MIDI Learn

Hamburger icon → MIDI Learn again, or tap Close in the upper right. That's it. Tap a button to toggle the clip; hold a button to clear it; the lights follow what Loopy Pro is doing.

What the lights and screen show

Customizing

Different CC numbers

Edit CLIP_CCS near the top of loopy_simple.py. The SLIDER_CC constant just below it controls the slider's CC.

Different colors

Edit CLIP_BRIGHT and CLIP_DIM. The defaults match Loopy Pro's standard clip palette (orange, yellow, lime, blue) so the physical buttons match what's on screen in the app.

Different sprite

The 16 tiles are generated by Scripts/generate_loopy_sprites.py using only Python's standard library. Edit the palette or state_tile() function to change the look, then re-run:

python3 Scripts/generate_loopy_sprites.py

The script writes CircuitPython/loopy_sprites.bmp regardless of where you run it from. Copy that BMP to your CIRCUITPY/ drive.

Files

Note: the firmware uses the label "voice" for serial debug output on button 1; the included project file labels the same clip Mic. The labels are cosmetic — only the CC numbers matter for the mapping.

← back to Music Devices