shawn
1c5b728e8b
Build: Web UI + mDNS (pedal.local)
...
FastAPI web server with REST + WebSocket, 5 Jinja2 HTML pages,
mobile-friendly dark theme CSS, page-specific JS controllers,
and Avahi mDNS service advertisement for pedal.local.
Files:
src/web/server.py — FastAPI app with 17 REST endpoints + /ws WebSocket
src/web/__init__.py — Package init with WebServer, WebServerDeps exports
src/web/templates/*.html — Dashboard, Presets, Models, IRs, Settings (base)
src/web/static/style.css — Dark mobile-first CSS (80-82% max-width)
src/web/static/websocket.js — Auto-reconnecting WebSocket manager
src/web/static/app.js — Dashboard live updates + REST helpers
src/web/static/presets.js — Bank/preset CRUD modal UI
src/web/static/models.js — NAM model list/load/upload
src/web/static/irs.js — IR file list/load/upload
etc/avahi/pi-multifx-pedal.service — Avahi service advertisement
scripts/setup-mdns.sh — One-shot mDNS setup (avahi, hostname, restart)
main.py — Wire WebServer into boot/shutdown
requirements.txt — Add fastapi, uvicorn, jinja2, python-multipart
tests/test_web.py — 36 tests (pages, REST, WebSocket, errors)
All 36 tests pass.
2026-06-08 00:57:26 -04:00
shawn
b7f5488efd
Keep Avahi for pedal.local mDNS, add web UI task
2026-06-08 00:38:37 -04:00
shawn
9e6f23cdb0
Fix minimize script: keep bluetooth+wifi, update baseline doc
2026-06-08 00:23:01 -04:00
shawn
39bac0b0cd
Build: DietPi OS minimization
...
- dietpi-postinstall.sh: first-boot setup from DietPi minimal with only
needed packages (Python, JACK, cmake, GPIO libs, I2C tools)
- minimize.sh: removes unused packages, systemd services, and kernel
modules with --dry-run and --aggressive modes; saves before/after profiles
- build-minimal-image.sh: produces flashable SD card image from scratch
(download DietPi + provision) or from a running SD card device
- baseline-footprint.md: documents before/after RAM, disk, boot time
targets and verification checklist
Closes t_38b86d31 — DietPi OS minimization
2026-06-08 00:12:40 -04:00
shawn
1c611646be
NAM model integration: rewrite nam_host.py with full inference pipeline
...
- NAMHost: process(), warm_up(), avg_inference_ms, model cache, crossfade
- ModelSwitchMode enum (INSTANT/CROSSFADE/PAUSE) with pipeline wiring
- list_available_models(), available_models(), process_with_model()
- Fixed pipeline.py type typo (NAMIHost -> NAMHost)
- Crossfade support wired through pipeline NAM_AMP route
- 25/25 NAM tests + 41/41 integration tests pass
- download_models.sh generates 10 verified Linear .nam models
2026-06-07 23:53:33 -04:00
shawn
0ae2ca6e8e
feat: PCM1808+PCM5102 I2S HAT design files
...
Custom I2S HAT for Pi Multi-FX Pedal — full hardware package:
- KiCad project: schematic (kicad_sch), PCB layout (kicad_pcb), project file
- Custom DT overlay: pcm1808-pcm5102-overlay.dts (no upstream overlay exists for PCM1808)
- docs/hardware-bom.md: BOM (9.25 HAT + 1.75 with enclosure), wiring diagram, PCB design notes
- docs/config-audio.md: DT overlay build, ALSA config, JACK integration, troubleshooting
- scripts/install_hat.sh: One-command install + test suite (6 tests)
- hardware/gerber/: JLCPCB fab instructions and assembly notes
Circuit: Guitar input → TL072 preamp (gain ~20dB) → PCM1808 ADC → RPi I2S
→ PCM5102 DAC → RC filter → output jack
I2S: BCLK/GPIO18, LRCLK/GPIO19, DIN/GPIO20, DOUT/GPIO21
Stacking header passes all 40 GPIO pins for footswitches/LEDs/display
2026-06-07 23:52:13 -04:00
shawn
0e77adb4c3
Build IR convolution engine
...
- Full FFT overlap-add IR convolution in IRLoader (process(), set_mix(), toggle)
- Lazy FFT computation — IR FFT padded to correct block+ir size on first process()
- Wet/dry mix control, enabled/disabled toggle with tail clearing
- Fixed pipeline._apply_ir_cab() to delegate to IRLoader.process() instead of
poking internals (old code had array-size mismatch bug: IR FFT at ir_len vs
block FFT at conv_size)
- 46 tests: loading, convolution correctness, overlap-add state, mix, toggle,
directory listing, performance budget (all <5ms even at 8192 taps), edge cases
- scripts/download_irs.sh: free IR pack downloader (God's Cab, Seacow)
2026-06-07 23:46:02 -04:00
shawn
c38a7b0fd8
Add main entry point + systemd services + integration tests
...
New files:
main.py - PedalApp: boots all subsystems in order,
wires MIDI/footswitch callbacks, graceful
teardown reverses boot order
src/system/config.py - YAML config loader with deep-merge
(separated to avoid hardware deps)
src/system/services.py - systemd unit generator for pedal.service
+ multi-fx-pedal.target
scripts/install_service.sh - copies project, creates venv, installs
+ enables service units
tests/test_integration.py - 41 tests: boot, routing, display sync,
teardown, systemd content, CLI, edge cases
Modified:
tests/conftest.py - add project root to sys.path
2026-06-07 23:39:50 -04:00
shawn
d9682f3bea
Build all FX blocks: gate, comp, boost/od/dist/fuzz, eq, mod (chorus/flanger/phaser/tremolo/vibrato), delay, reverb (Schroeder), volume
...
- 15 FX blocks implemented with per-block state isolation
- All blocks <500us per 256-sample block (reverb closest at 465us on x86)
- 57 unit tests all passing (per-effect, chain, bypass, state isolation)
- Benchmark script at scripts/benchmark_fx.py
- Vectorised delay reads via read_block_varying()
- scipy.lfilter for EQ (3-band RBJ) and reverb damping
- Fixed _DelayLine.write_block wraparound crash for large blocks
- Comb/Allpass buffers sized to BLOCK_SIZE * 2 minimum
2026-06-07 23:32:28 -04:00
shawn
ce06a4360d
Build: hardware UI layer — footswitch debounce, RGB LEDs, OLED display
...
- footswitch.py: GPIO debounce engine (20ms window), long-press detection
(500ms), threaded poll loop with virtual pin support for testing
- leds.py: WS2812B/APA102 RGB LED controller with bypass indicator
(red/green), preset navigation scan animation, tap tempo blip,
configurable brightness (0.0-1.0)
- display.py: SSD1306 128x64 OLED renderer with preset mode (bank +
preset name + FX chain), tuner mode (note + cents bar), FX edit
(parameter bar), settings mode, boot splash
- __init__.py: Public API re-exports for all 3 modules
- tests/test_ui.py: 37 tests — debounce engine, GPIO simulation,
short/long press boundary, LED pixel control, bypass colors,
display mode rendering (preset/tuner/fx_edit/settings)
- scripts/ui_test.py: standalone test tool (python scripts/ui_test.py
--all or --interactive)
2026-06-07 23:26:44 -04:00
shawn
ed29748a62
Initial scaffold: Pi Multi-FX Pedal with NAM A2, IR cab, multi-FX, MIDI, stomp UI
2026-06-07 23:22:43 -04:00