memlnaut-nisps/vcv
w1n5t0n 6a76f15736 feat(vcv): complete Phases 3, 4, 5 — RL feedback, display, configurability
Phase 3 — RL feedback system:
- Background worker thread with job queue, condition variable, atomic flags
- Thumbs up/down buttons + CV trigger inputs (Schmitt triggers)
- Learn enable toggle + gate input (OR logic)
- Noise level tracking (decay on +, increase on −, spread-dependent cap)
- Post-change output crossfade (configurable slew, default 10ms)
- Rapid feedback queueing with coalescing (max depth 1)
- Graceful thread shutdown (shouldStop flag, joins in destructor)

Phase 4 — Visual feedback:
- NanoVG bar graph display (12 hue-coded bars, noise level, TRAIN indicator)
- 12 output level LEDs, LEARN LED (green), training LED (yellow)

Phase 5 — Configurability:
- RATE knob: exponential decimation from block-rate to audio-rate
- Per-output range: unipolar (0-10V) / bipolar (±5V) via context menu
- Per-input range: unipolar / bipolar via context menu
- 12 attenuverter trimpots (-1 to +1)
- SPREAD CV input for knob modulation
- CLEAR button with 1-second long-press guard
- Output slew configurable via context menu (0-100ms)
- State serialization (ranges, noise, slew) via dataToJson/dataFromJson

Note: double-buffering uses direct IML access (not shadow copy) pending
IML weight get/set API (filed as meml-ft7).
2026-03-28 01:04:07 +02:00
..
res feat(nisps-core,vcv): complete Phase 0 + Phase 1 2026-03-28 00:36:46 +02:00
src feat(vcv): complete Phases 3, 4, 5 — RL feedback, display, configurability 2026-03-28 01:04:07 +02:00
test test(vcv): add smoke test harness — 7/7 pass 2026-03-28 00:50:36 +02:00
Makefile feat(nisps-core,vcv): complete Phase 0 + Phase 1 2026-03-28 00:36:46 +02:00
plugin.json feat(nisps-core,vcv): complete Phase 0 + Phase 1 2026-03-28 00:36:46 +02:00
SPEC.md docs(vcv): third review — input ranges, CV modulation, lifecycle, smoke test 2026-03-28 00:22:43 +02:00