Firmware

chompi-poly

Hype17/100

POLY: a Mono/Poly-style analog synth firmware for the CHOMPI

chompi-poly is custom firmware for the CHOMPI Club CHOMPI, by @sfaber02. 2 stars on GitHub.

forCHOMPI Club CHOMPI·by@sfaber02

Unclaimed. Is this yours? Sign in with GitHub as @sfaber02 to claim it.

Downloads
0
Stars
2
Forks
0
Commits
32
Last commit
Download beta

Betacheatsheet.png· 390 KB· +1 file

Custom license· sfaber02/chompi-poly·downloads come from the creator’s GitHub releases

32
Commits
1
Releases
32 commits and 1 release in the last year
Activity · last 12 months

POLY

An analog-style synth for the CHOMPI, after the Korg Mono/Poly. Each voice has four oscillators (saw, pulse with PWM, triangle) with hard sync and cross-mod. They feed a resonant 24 dB ladder filter, a filter envelope, an amp envelope and an LFO. After the voices come chorus, a ping-pong delay, reverb and saturation. There's also an arpeggiator. The toggle switch picks mono (with unison and glide) or 6-voice poly.

It runs on its own like any stock CHOMPI firmware, or as one firmware on the multi-firmware launcher card alongside TAPE, TEMPO and WAVE.

Status: beta. Download the latest from Releases.

Install

Download the latest from Releases. Install is one file: the factory patches are built in.

On its own (like a stock firmware)

  1. Copy POLY.bin to the root of the card. It must be the only .bin there, so remove any other (a stock firmware's is usually CHOMPI.bin).
  2. Power on. The rainbow shows while the bootloader installs it, and from then on the CHOMPI boots straight into the synth.

To switch back to TAPE or anything else, use a card with that firmware's .bin in the root, as usual.

On the multi-firmware launcher

  1. Copy POLY.bin into /FIRMWARE. It goes on the first free key: key 4 on a stock launcher card. To put it on a particular key, put that number in front, e.g. 09_POLY.bin for key 9.
  2. Power on and press the key.

Or send POLY.bin over USB MIDI from the launcher (web uploader).

POLY creates a /POLY folder on the card for your saved patches, the sound you left it on, and options.json. A patch you save to a factory slot replaces that slot's built-in patch. A brand-new card starts on patch 2 (brass).

Playing it

It follows the stock CHOMPI idiom: CHOMPI is shift.

DoDoes
KeysPlay (two octaves from C3)
Knobs 1–4The current page's four main controls
CHOMPI + turn knob 1–4That knob's second control on this page (knobs without one go dark while CHOMPI is held)
CHOMPI + click knobReset it to default
Click knob 1–4 on the OSC pagePick which oscillator the knobs edit. White keys 1–4 always show it: the selected one is bright, oscillators that are switched off are darkest
Big purple knobFilter cutoff, on every page. CHOMPI + turn: resonance
Volume knob (right)Master volume. CHOMPI + turn: arp tempo while the arp is on, saturation otherwise. Click: all notes off
CHOMPI + black keyChoose a page (below). The keybed flashes the page colour
CHOMPI + white keyLoad patch 1–15. Hold 1 s to save to that slot
PLAYArpeggiator on/off
LOOPHold: latches the arp, or works as a sustain pedal when the arp is off
CHOMPI + PLAY / LOOPOctave down / up (a shortcut for the TUNE page's octave)
Toggle switchUp = mono, down = poly
CHOMPI + PLAY + LOOP at power-onShipping mode (battery off), as in the stock firmwares

When you turn a knob, the white keys briefly show its value as a bar. A centred bar means the knob is bipolar, and stepped settings light one key. Hold CHOMPI to see the page map on the black keys and your patch slots on the white keys: the patch you are on is blue, saved slots glow dim, empty slots are dark. Holding CHOMPI also turns the volume knob's LED into a CPU meter. The sound you leave is saved to /POLY/current.txt and comes back at power-on.

Pages (black keys, left to right)

KeyPageKnob 1Knob 2Knob 3Knob 4
1OSC (orange)
click knob 1–4 = choose oscillator 1–4
wave: saw/pulse/tri
CHOMPI: pulse width
octave: 16′ 8′ 4′ 2′level
CHOMPI: noise
detune
2MOD (pink)synccross-modsync sweepglide
CHOMPI: unison
3FILTER (blue)cutoffresonance
CHOMPI: drive
env amount ±key track
4F-ENV (indigo)attack
CHOMPI: velocity → filter
decaysustainrelease
5A-ENV (green)attack
CHOMPI: velocity → amp
decaysustainrelease
6FX (teal)delay mix (middle = 50/50, top = all echoes)delay timefeedback (top = infinite)chorus
CHOMPI: stereo spread
7REVERB (warm)mix (middle = 50/50, top = all reverb)sizetonesaturation
8LFO (purple)rateshape: tri/sine/saw/square/S&H→ pitch
CHOMPI: → PWM
→ cutoff
9ARP (yellow)mode: off/up/down/up-down/random/as playedrange 1–3 octtempo (also CHOMPI + volume while the arp runs)gate (full = legato)
10TUNE (white)octave −2…+2transpose ±12 semitonesfine tune ±50 cents (1-cent steps)MIDI bend range 1–12

🎛️ The OSC page edits one oscillator at a time. Each voice has four oscillators. On the OSC page, click knob 1, 2, 3 or 4 to choose which oscillator the knobs are editing. White keys 1–4 show which one is selected. Every patch starts with oscillators 3 and 4 silent: select one and turn up its level (knob 3) to bring it in.

A patch is the sound; the TUNE page is the instrument. Everything on pages 1–9 is saved in the patch, including each oscillator's octave and detune, and the arp. TUNE sets where the whole instrument sits: your octave, your key, and matching other gear. It isn't saved in patches, doesn't change when you load one, and is remembered at power-on. While you're shifted (octave, transpose or fine tune off centre), the TUNE black key glows amber. CHOMPI + click resets a TUNE knob to zero. Loading a patch also releases LOOP hold, so a new patch never starts with stuck notes.

  • Sync locks oscillators 2–4 to oscillator 1.
  • Sync sweep lets the filter envelope push their pitch, which gives the classic sync scream. Turn up osc 2's level and lower osc 1's to hear it on its own.
  • Cross-mod frequency-modulates 2–4 from oscillator 1, for bells and clangs.
  • Unison (mono mode) stacks all six voices on one note, detuned and spread.

Factory patches

  1. sync lead (mono)

  2. brass (poly)

  3. unison bass (mono)

  4. PWM strings (poly)

  5. X-mod bell

  6. arp pluck

  7. acid (mono, up an octave with CHOMPI+LOOP if you like)

  8. init: one plain oscillator, as close to a sine as it gets, with every effect and modulation off. Start here to build a sound from scratch.

MIDI (untested)

MIDI is implemented but hasn't been tested on hardware yet.

  • Input: DIN and USB.
  • Channel: set in /POLY/options.json.
  • Notes: with velocity.
  • Other messages: pitch bend (range set on the TUNE page, default ±2), mod wheel (CC 1, adds vibrato), sustain (CC 64), volume (CC 7), all notes off (CC 120/123).
  • Parameter CCs:
CCCCCCCC
5glide76amp sustain84delay mix104sync sweep
10spread77LFO rate85reverb size105unison
71resonance78LFO shape86reverb tone106filter env amount
72amp release79LFO → pitch87saturation107key track
73amp attack80LFO → PWM88noise108drive
74cutoff81LFO → cutoff89arp mode109–112filter A D S R
75amp decay82delay time90arp range113 / 114velocity → filter / amp
83feedback91reverb mix115 / 116arp tempo / gate
93chorus117fine tune (global)
102 / 103sync / cross-mod

Building

cd code/src
PATH=/path/to/gcc-arm-none-eabi-10.3-2021.10/bin:$PATH make

This produces code/src/build/CHOMPI.bin. The libraries in code/libs are CHOMPI Club's adapted libDaisy and DaisySP, vendored with their prebuilt .a files. Don't swap in stock versions.

Listening without hardware

host/ builds the same engine on your computer and renders test patches and the factory patches to WAV:

make -C host
host/render host/out                                   # test sounds
host/render --factory docs/factory-patches host/out/factory   # factory patches as text + demos
python3 host/alias.py host/out/saw_sweep.wav           # aliasing check

Layout

PathWhat
code/src/synth/The instrument, pure C++ with no hardware dependency: osc.h (band-limited oscillators with polyBLEP), ladder.h (ZDF ladder filter), env.h, lfo.h, voice.h, arp.h, chorus.h, delay.h, engine.h, params.h (every parameter, page and CC), factory.h (the built-in factory patches)
code/src/ui.hKeys, knobs, LEDs
code/src/presets.hPatch files on the SD card
code/src/chompi_main.cppStartup, audio interrupt, main loop
hardware.h, encoder.*, temp_led_stuff.h, reverb.h, fx_engine.h, OptionsManager.h, chompi_sram.ldsTaken from CHOMPI Club's WAVE firmware

Credits

  • Synth by hiwatts (@sfaber02).
  • Built on CHOMPI Club's open-source CHOMPI firmware (MIT). The hardware layer is from WAVE, with Electrosmith's libDaisy.
  • The reverb is Mutable Instruments' Rings reverb by Emilie Gillet (MIT).
  • The oscillator anti-aliasing follows the polyBLEP approach in Mutable Instruments' Plaits. The filter follows Vadim Zavalishin's The Art of VA Filter Design.

This is a community firmware, not an official CHOMPI Club release. The CHOMPI name belongs to CHOMPI Club.