$ show bkshepherd/DaisySeedProjects
Repository contains a complete open-source guitar-pedal product line: custom KiCad PCB and enclosure hardware for the Electrosmith Daisy Seed (125B, 1590B, and 1590B-SMD variants) plus the matching bare-metal C++ firmware that runs on the STM32H750. The firmware is the dominant software artifact: a modular, block-based audio effects platform with 40+ loadable DSP modules (drive, delays, reverbs, modulation, granular, spectral, tuner, looper, drum/synth voices, NAM neural amp model, IR cab loader), a menu-driven OLED UI, MIDI CC/note support, footswitch control, and persistent effect presets. The architecture is a compile-time composition rather than a runtime plugin system. A BaseEffectModule interface and EffectChain allow serial effects per hardware variant, selected through loaded_effects.h and Makefile target flags. GuitarPedal.cpp drives the real-time audio callback, control monitoring, MIDI dispatch, and autosave. Hardware variants are abstracted by BaseHardwareModule subclasses that define pin maps, LEDs, true-bypass switching, and display wiring. Heavy DSP state (delay lines, FFT buffers) is placed in SDRAM/DTCM via global DSY_SDRAM_BSS blocks, which gives low latency but severely limits how many effect instances can be active. Overall quality is good for an embedded audio project: the effect-module pattern is consistent, several components (NAM A2 inference, Dattorro reverb, persistent-store layout migration, tape-flutter modulation) are genuinely reusable, and CI builds all variants. The codebase carries real maintenance debt: hardcoded sample-rate assumptions, global-buffer single-instance effects, commented-out experiments, duplicated hardware modules, and patched copies of upstream DSP headers. It is actively maintained but not a polished library; reuse is best done by extracting individual effect or utility headers rather than adopting the project wholesale.
The LLM identified 5 files worth highlighting for reuse:
Allocation-free C++ inference engine for NAM A2 wave-net guitar amp models, optimized for STM32H7: branchless leaky ReLU, dual-sample kernel, bitmask ring buffer, explicit hot/state memory placement, and 48-sample block processing. The header is self-contained and can be lifted into another embedded audio project with minimal adaptation.
Self-contained port of the Dattorro 1997 plate reverb with modulation, freeze, time scaling, and a custom SDRAM arena allocator. The DSP headers are cleanly separated from pedal UI/MIDI code and only require audio buffers to process. GPL-3.0 licensed, so license compliance is required for reuse.
Python converter that turns NAM JSON model definitions into constexpr C++ arrays and table metadata for the embedded A2 runtime. Solves the recurring problem of embedding neural network weights into firmware without runtime JSON parsing, and makes adding new amp models reproducible.
Versioned persistent settings and preset manager for embedded flash: fixed Settings struct, format-version bumping, layout-hash validation to detect parameter layout changes across firmware updates, throttled saves, and autosave. The layout-hash migration pattern is reusable for any on-device settings store.
Tape transport emulation utility implementing wow/flutter, tape age, and imperfections, shared by tape-delay and dual-echo effects. A self-contained DSP class that can be extracted for any tape-style audio effect in a different project.