Skip to content

Extended banks (D/E/F) + stereo mode#4

Open
HiDAl wants to merge 11 commits into
Befaco:Communityfrom
HiDAl:feature/extended-banks-stereo
Open

Extended banks (D/E/F) + stereo mode#4
HiDAl wants to merge 11 commits into
Befaco:Communityfrom
HiDAl:feature/extended-banks-stereo

Conversation

@HiDAl

@HiDAl HiDAl commented Apr 20, 2026

Copy link
Copy Markdown

Follow-up to #3 — per @xustafu's request, targeting the new Community branch.

Summary

  • 3 new banks (D/E/F) — 30 new algorithms total
    • 8 plugins using native Teensy audio objects
    • 22 plugins using a new AudioStreamCustom base class for per-sample DSP
  • Stereo mode — real L/R panning, persisted in EEPROM (byte 2), display integration
  • Build tooling — Makefile for firmware build/flash
  • Docs — README + firmware docs

Transparency

As noted in #3, this was developed with Claude (Anthropic). I directed design, tested on hardware, and curated results — Claude wrote the C++/DSP. Flagging here too so reviewers know what they're looking at.

Open questions from @xustafu (issue #3)

Happy to discuss on this PR:

  • Some metallic algorithms possibly overlapping with existing ones
  • One algorithm that "seems silent"

Point me at the specific algos and I'll dig in.

Pablo Alcantar and others added 11 commits April 12, 2026 00:28
Was clamping to programsPerBank (10) instead of numBanks (5).
The banks array only has numBanks elements, so an out-of-range
index would access beyond the array.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
AudioStreamCustom: base class for plugins with per-sample DSP that
bypasses Teensy AudioConnection routing. Subclasses implement
fillBlock() to generate 128 audio samples.

Banks.hpp: numBanks 5 → 6
Banks_Def.hpp: add BANKS_DEF_4 (Resonant Bodies), BANKS_DEF_5
(Chaos Machines), BANKS_DEF_6 (Stochastic)
Banks.cpp: add includes and bank6 to array

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
These use standard AudioConnection routing (no custom DSP):
- FormantNoise: noise → 3 SVF bandpass → mixer (vowel formants)
- IceRain: S&H → freeverb → mixer (ambient droplets)
- NoiseHarmonics: noise + DC → wavefolder → SVF lowpass
- DroneBody: 2 cross-FM sines → mixer → wavefolder
- FlangeNoise: pink noise → flanger
- BitShift: 2 sawtooths → XOR digital combine
- RunawayFilter: noise → SVF bandpass at extreme Q
- MetallicNoise: 6 square oscs → 3 mixers → SVF highpass

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Bank D custom DSP:
- CombNoise, PluckCloud, TubeResonance (comb filter / delay-based)
- BowedMetal, NoiseBells (high-Q 2-pole resonators)

Bank E custom DSP:
- LogisticNoise, HenonDust (mathematical chaos)
- CellularSynth (CA + 8 sawtooth phase accumulators)
- StochasticPulse (random impulses + inline SVF)
- FeedbackFM (self-feedback sine)
- GlitchLoop (buffer capture + bit degradation)
- SubHarmonic (square + frequency dividers)
- DualAttractor (coupled Lorenz + sine oscillators)

Bank F custom DSP:
- PulseWander, TwinPulse, QuantPulse, ShapedPulse, ShiftPulse
- NoiseSlew, NoiseBurst (inline noise generation)
- LFSRNoise (16-bit LFSR with selectable taps)
- DualPulse (dual S&H)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
make          — compile for Teensy 4.0
make upload   — compile + flash (auto-detects port)
make clean    — remove build artifacts
make port     — list available serial ports

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Double-click the encoder to toggle stereo mode:
- B mirrors A's algorithm automatically
- XA/YA control both generators
- XB = stereo width (timbral offset between L/R)
- YB = stereo movement (LFO speed for offset)
- Both display dots light up to indicate stereo
- Offset applied to k2 (timbre) not k1 (pitch)
- B syncs when A changes program

Single click delayed 300ms to distinguish from double-click.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Rewritten README with build instructions, bank overview, stereo mode
summary, memory usage, and links to detailed guides.

Documentation copied from VCV repo:
- NOISE_PLETHORA_PLUGIN_GUIDE.md — all 60 algorithms with parameters
- NOISE_PLETHORA_CATEGORIES.md — programs by use case
- NOISE_PLETHORA_STEREO_GUIDE.md — stereo mode and patch ideas

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace timbral offset with real amplitude panning (gainL/gainR
modulation via sine LFO). Add time-based LFO with quadratic speed
response (max 1.5 Hz, independent of loop rate). Save and restore
B's bank, program, and A/B mode on stereo toggle. Auto-exit bank
mode on stereo entry. Show both decimal dots in bank mode + stereo.
Add setGains() to AudioProcessor. Update README and stereo guide
with complete control reference and panning details.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Stereo mode now survives power cycles. On boot, if stereo was active,
B is synced to A and encoder is forced to A mode.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… compilation

- Fix incorrect "3 generators (A, B, C)" reference to "2 generators (A and B)"
- Exclude 7 unused experimental plugins from compilation to save flash space
- Document experimental plugins in README with re-enable instructions
- Add EEPROM layout table to README
- Clarify stereo mode display behavior in STEREO_GUIDE

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant