Skip to main content

Host renderer for the Cinderwave acid groovebox: bakes patterns to WAV through the same zero-dependency C++17 DSP core that runs on the RP2040 hardware.

Project description

Cinderwave

An open-hardware acid groovebox that fits on a $4 microcontroller.

Cinderwave is a monophonic synth voice and 16-step sequencer in the TB-303 idiom — band-limited oscillators, a resonant zero-delay-feedback filter, per-step accent and slide — running on a Raspberry Pi Pico (RP2040). The entire DSP core is platform-independent C++17 with no dynamic allocation, no exceptions, and no dependencies, so the exact same code that drives the hardware also renders a .wav on your desktop.

   ┌───────────┐   ┌──────────┐   ┌──────────────┐   ┌─────────┐
   │ 16-step   │──▶│ Oscillator│──▶│ SVF filter   │──▶│ VCA     │──▶ out
   │ sequencer │   │ saw/sqr/  │   │ (cutoff env  │   │ (amp    │
   │ note/gate/│   │ tri/sine  │   │  + resonance)│   │  env)   │
   │ accent/   │   │ PolyBLEP  │   └──────▲───────┘   └────▲────┘
   │ slide     │   └───────────┘   filter env          amp env
   └───────────┘

Why it's fun

  • Band-limited oscillators — PolyBLEP saw and square, so the high notes don't alias into mush on a cheap DAC.
  • Cytomic TPT state-variable filter — the good resonant filter, stable and self-oscillating across the whole cutoff range.
  • Real acid behavior — accent boosts amplitude and opens the filter; slide portamentos between steps without retriggering the envelope.
  • One codebase, two worlds — flash it to a Pico, or cmake && ctest it on your laptop and bake the demo pattern to audio.

Quick start (no hardware needed)

cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j
ctest --test-dir build --output-on-failure     # DSP unit tests
./build/cinderwave_render out.wav              # bake the demo acid line to WAV

cinderwave_render writes ~8 seconds of the built-in demo pattern (a driving 130 BPM bassline with accents and slides) to a 16-bit mono WAV.

Build the hardware

Full bill of materials, GPIO pin map, and two audio-output options (a budget PWM + RC filter, or a PCM5102A I2S DAC) live in hardware/BUILD.md.

Minimum viable Cinderwave:

Part Qty Notes
Raspberry Pi Pico (RP2040) 1 the whole synth
10 kΩ linear potentiometer 3 cutoff, resonance, tempo
Tactile button 1 play / stop
1.8 kΩ resistor + 10 nF cap 1 RC reconstruction filter (~16 kHz)
10 µF cap + 3.5 mm jack 1 DC-blocked line out

Flash the firmware

cd firmware/rp2040
export PICO_SDK_PATH=/path/to/pico-sdk
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j

Hold BOOTSEL while plugging in the Pico, then drop build/cinderwave_firmware.uf2 onto the RPI-RP2 drive. It boots straight into the demo pattern; the three pots take over cutoff, resonance, and tempo, and the button toggles playback.

Layout

include/cinderwave/   Public API — the frozen DSP contract (headers only)
src/                  DSP core: oscillator, envelope, filter, voice, sequencer, synth
host/                 Desktop WAV renderer (uses the identical core)
firmware/rp2040/      Pico SDK target: PWM audio + pot/button controls
tests/                Dependency-free unit tests (built and run in CI)
hardware/             Build guide, BOM, wiring, pin map

Continuous integration

Every push builds the core, runs the unit tests, renders the demo WAV, and cross-compiles the RP2040 .uf2 — both artifacts are uploaded from the run. See .github/workflows/ci.yml.

License

MIT — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cinderwave-0.1.0.tar.gz (18.2 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

cinderwave-0.1.0-py3-none-win_amd64.whl (14.0 kB view details)

Uploaded Python 3Windows x86-64

cinderwave-0.1.0-py3-none-manylinux_2_28_x86_64.whl (12.2 kB view details)

Uploaded Python 3manylinux: glibc 2.28+ x86-64

cinderwave-0.1.0-py3-none-macosx_14_0_arm64.whl (9.5 kB view details)

Uploaded Python 3macOS 14.0+ ARM64

File details

Details for the file cinderwave-0.1.0.tar.gz.

File metadata

  • Download URL: cinderwave-0.1.0.tar.gz
  • Upload date:
  • Size: 18.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for cinderwave-0.1.0.tar.gz
Algorithm Hash digest
SHA256 28b66fc98eae900861255d4a9f34421bbc56f48c831d2acf10128bd222d20849
MD5 5bddbf61b34ec2a195cd18d8fef02d44
BLAKE2b-256 e7f74d5e21fbd86cf5d0327d8a68e7b2ca1d3b228eb9b8d7e2c8dee89c1ba7ed

See more details on using hashes here.

Provenance

The following attestation bundles were made for cinderwave-0.1.0.tar.gz:

Publisher: pypi.yml on Makeph/cinderwave

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cinderwave-0.1.0-py3-none-win_amd64.whl.

File metadata

  • Download URL: cinderwave-0.1.0-py3-none-win_amd64.whl
  • Upload date:
  • Size: 14.0 kB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for cinderwave-0.1.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 40991fe6aabeabac4adbf0a0e38e31682c253efaf774286fadb5bc4047c0c58f
MD5 2960f9d8e2ba55d5fb0049e50883be02
BLAKE2b-256 120abb10e7e86babbbeeb759838fe067327711902925ea1fc6d74c5ee7155992

See more details on using hashes here.

Provenance

The following attestation bundles were made for cinderwave-0.1.0-py3-none-win_amd64.whl:

Publisher: pypi.yml on Makeph/cinderwave

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cinderwave-0.1.0-py3-none-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for cinderwave-0.1.0-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5937cdd9a4c090c36193ed63bf216fadbd118389805040f35b773346c7736bdd
MD5 e7e78ab895b85cb075d7b4731ddb0d83
BLAKE2b-256 c5b749da93e853e809b24a93a0af8a608add3b61db05b3b964846ab1ec00f748

See more details on using hashes here.

Provenance

The following attestation bundles were made for cinderwave-0.1.0-py3-none-manylinux_2_28_x86_64.whl:

Publisher: pypi.yml on Makeph/cinderwave

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cinderwave-0.1.0-py3-none-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for cinderwave-0.1.0-py3-none-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 d266885a1525f9924763d70721b9c0636bbccf3455f32f84b9c84b0cb01b6c6c
MD5 328bf227f613cd917d37eef4741c5e71
BLAKE2b-256 1f39b1a8aaf2ce03883f24ed4c8dd08937ceb2b9f7ec5c5da87c51dab036f375

See more details on using hashes here.

Provenance

The following attestation bundles were made for cinderwave-0.1.0-py3-none-macosx_14_0_arm64.whl:

Publisher: pypi.yml on Makeph/cinderwave

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page