v0.9.3 (2026-06-17)
Fixes
- Scale picker — clicking a scale now selects the one you clicked (it could land a few rows off).
- Sculpt no longer silences Source 2 — with the resonant Blend engaged, your Source 2 layer plays again.
- Converge is now polyphonic — modulating it (e.g. with an envelope) retriggers per note instead of being shared across all notes.
- The Overtone-Scan highlight no longer lingers on a partial when the scanner is off.
- Settings: the Detune label shows a clean “c” instead of a broken character.
New & changed
- Detune range widened (±100¢) and Drive extended for more saturation headroom.
- Source 2 Fine tuning is now a modulation destination (route an LFO/Env for vibrato or sweeps).
- RAND now also exercises Sculpt, Source 2, and the Harmonic Envelope — and leaves Pan where you set it.
v0.9.1 (2026-06-16)
Fixes
- Sculpt waveforms are true now — the Morph shapes account for the engine’s natural harmonic rolloff, so square sounds (and looks) like a square, saw like a saw, triangle like a triangle. Previously a “square” came out as a triangle.
- Resonant noise responds to velocity — it used to play at full level no matter how softly you played, so quiet notes could be drowned in hiss. It now tracks velocity like the partials.
- Morph labels & detents line up — saw / square / triangle / pulse now sit exactly under their positions on the slider and snap to the pure waveform.
v0.9.0 (2026-06-16)
Fixes
- Harmony Wheel on iPhone & iPad — the wheel now tracks what you play (MIDI or the on-screen keys) on mobile. Previously the harmony engine only ran on desktop, so the wheel sat still on phone and tablet.
New
- Sculpt, rebuilt — the bars are an independent multiplier shaped like the sound: a sawtooth reads as a descending ramp, and every harmonic is editable with real headroom to push it louder, not just cut. It no longer mirrors the matrix — Sculpt and the partial matrix are separate tools that stack.
- Mod Matrix — click an existing connection to toggle it off (no more double-click hunting).
v0.8.2 (2026-06-16)
Fixes
- Source 2 off now means off — turning the Source 2 module off used to still leave its “Synth” double quietly doubling your partials. All Source 2 modes now respect the module on/off, so the partials sound clean on their own.
v0.8.1 (2026-06-16)
Fixes
- Stuck note — sliding a note across the on-screen keyboard and lifting (especially in mono mode) could leave it ringing. Fixed at the source: a slide keeps its held-key tracking in sync, so lifting releases cleanly.
v0.8.0 (2026-06-16)
A critical fix-up plus a smarter Sculpt section.
Fixes
- Stuck notes — sliding across the on-screen keyboard and lifting could leave a note ringing. Fixed; slide-and-lift releases cleanly.
- Resonant blend — it was adding broadband hiss regardless of what you played. It now reinforces only the partials you’re actually generating, so a note resonates around itself instead of hissing everywhere.
- Sculpt at “saw” — the far-left morph position is the identity again: Sculpt on at saw is identical to Sculpt off.
New
- Air — a new Sculpt control that widens (breathy) or narrows (focused) the resonant peaks; also a modulation destination.
- The additive↔resonant Blend is now a modulation destination.
- The Sculpt bars show the actual resulting harmonic levels (structure × your multiplier), like the matrix, and you can boost any partial up — not just cut.
- EQ, Delay, and Reverb are color-coded so they read apart at a glance.
- Taller default window (desktop) and a mobile touch-target pass.
v0.7.0 (2026-06-15)
A Sculpt update — the harmonic editor is now honest, and the resonant-noise mode grew up.
Sculpt
- What you draw is what you hear. The drawbars map straight to the sound — no more hidden weighting where two bars at the same height held different levels, or upper partials that were audible but invisible. 100% is always at the top, and every bar pulls the full height.
- Quiet partials are dialable. A gentle taper gives low levels real height, so “a little” and “none” are easy to tell apart and place. The editor is taller, too.
- Your sculpt curve now saves. Hand-drawn spectra travel with Copy/Paste presets and with your DAW project — they used to be lost on reload.
- Morph shapes are true spectra. Saw and square taper at 1/n, triangle at 1/n², pulse is flat — so the shapes look like the waveforms and leave headroom to push an upper partial up.
Resonant Noise
- Stretch and the Harmonic Envelope now shape the resonant partials, like they do the additive engine — so the breathy/resonant mode retunes and swells with the rest of the synth instead of sitting still.
Coming next
- More of the synth (Converge, Harmonic Gate, Overtone Scan) acting on the resonant partials, and an Air control for the breathy mode.
v0.6.0 (2026-06-12)
New
- String scope mode — draws the synth’s live harmonics as a vibrating string, with three views to flip between, swelling and decaying with each note.
Fixes
- Partials Advanced sliders now respond on desktop.
v0.5.0 (2026-06-03)
The chord-function Harmony Wheel is now built into the synth, with a full scope overhaul.
New
- Harmony scope mode — the BKS Harmony Wheel’s functional-harmony display, right inside the synth’s scope. It reads what you play and shows each chord’s role (I, V7, V/V, ♭VII, vii°…) and the active space (HOME / SUB / PAR / REL / BLUES). Click a wedge to play that chord. The key follows the synth’s Scale Root; “lock wheel” freezes the space; bonus wedges appear on demand.
Scope
- Goniometer — the lissajous now rotates 45° (mid vertical, side horizontal) with a phase correlation meter along the bottom.
- True-sawtooth oscilloscope — plots the full L+R mix (previously showed odd partials only at stereo width).
- Steadier display — fills the scope at any level without pumping, round circles, width-keyed mono/stereo.
Other
- Standalone MIDI volume (CC7) — your controller’s volume fader now works in the standalone app (the plugin defers to the host in a DAW).
- Click a scope title to jump straight to that view; the key badge is now a dropdown key picker.
Note: the plugin is now named BKS Harmonic (was “BK Harmonic”). Saved DAW projects keep working — only the display name changed. macOS (Universal); Windows VST3 coming shortly.
v0.4.0 (2026-05-18)
New
- Harmonic Envelope — a new section: pick a group of partials in a 24-cell grid, then shape that group’s level with its own ADSR, plus Fade, Depth, and Attack Height controls. A polarity invert flips it — the group blooms up on release instead of fading.
- Source 2 “Synth” mode — a detuned, independent double of the partials matrix for unison and chorus, with a Track Morph toggle to follow or ignore Converge / Stretch / Unison.
- Global Transpose — a new Output control with octave buttons for exact jumps.
- Filter “Key” slider — true keyboard tracking (bipolar), scaling cutoff with note pitch. Modulation-routable.
Modulation
- Every envelope is now per-note. The Harmonic Envelope and Env 1 shape each note independently from velocity, envelopes and Note position. Harmonic Envelope attack height is now a modulation target too, with a floor so velocity can’t drive a soft note to silence.
- Env 2 → VCA and VCF — Env 2 can now shape amplitude and filter cutoff per voice, with its own bypass toggle.
- Env 2 and Harmonic Envelope polarity invert — inverted, the envelope blooms up on release.
- Partials Floor toggle in the modulation gear popup.
Sound
- Phase is now bipolar. Positive sweeps a uniform pitch bend (harmonic ratios preserved); negative sweeps a spectral tilt — two distinct motions from one control.
- Noise envelope range widened to 1 ms – 10 s — low attack values are noticeably snappier.
Fixes
- Fixed the static blowup. If the signal goes out of range the FX chain now recovers instantly, instead of circulating garbage until it decays.
- Fixed CPU overload from voice stacking. Fast and repeated notes used to pile up voices that never got reclaimed; superseded voices now fast-release and inaudible decayed voices are freed.
- Fixed clicks on filter sweeps — filter coefficients now interpolate every sample instead of stepping at block boundaries.
- Fixed zipper noise on Phase sweeps — the phase offset now interpolates every sample.
- Fixed dead short attacks — Env 2 and the Noise envelope silently skipped any attack shorter than ~100 ms; they now work down to 1 ms.
- Fixed the Sum button — it was wired to mono/legato by mistake; it now does a true stereo-to-mono sum (the scope still shows the pre-sum stereo).
UI
- Per-note matrix animation — playing a note fires a landing-burst marker at its spot in the partials matrix, fading over about half a second.
- New Source 2 selector with a Synth-mode reticule icon.
- Filter “Track” slider renamed “Scan” — it pulls cutoff toward the scanner’s selected partial; the old label and help text were wrong.
- Help-text pass throughout, including the modulation gear (drag to adjust the focused route, Alt-click to bypass, Shift-click to zero).
v0.3.9 (2026-05-12)
Audio
- Noise generator now scales with velocity by default — soft notes get soft noise, no more constant hiss on quiet keys.
UI
- New V (voices) and O (oscillators) meters in the scope, next to L/R level. Hover any bar — including the limiter triangle — for a one-line explanation.
- Polyphony slider in Settings (1–16, default 8) — cap voice count to control CPU vs. dense-chord coverage.
- Mod-matrix gear feedback: Fold and Partials gears in the partials matrix now color-shift to their assigned mod source and draw a small arc showing amount. Empty routes stay gray.
Quality of life
- Patch share button now copies a markdown link (“BK Harmonic patch”) instead of a giant URL. Paste handler still accepts bare URLs.
Coming next: still chasing the onset click through the filter under some conditions.
v0.3.8 (2026-05-12)
Audio
- VCA release fix: notes always fade to zero on key-off, regardless of VCA depth. Previously, low VCA settings let voices play at near-full volume through the entire release phase before snapping off.
- VCA default raised from 75 → 100 (full envelope by default on fresh patches).
UI
- VCA help text updated: “0 = flat (organ). 100 = full envelope. Release always fades to zero.”
v0.3.7 (2026-04-22)
Audio
- VCA restored to linear blend —
eva=100now means full envelope depth (matches legacy preset semantics). No more power-curve “punch mode” at high values.
UI
- Oscilloscope sawtooth display fixed (coherent partial phases on fresh notes)
- Shift+hover partial mute restored (works as modifier on top of hover mode pill)
- Per-button help text for scan section (wave shapes, retrig, 1-shot, mode, sync)
- Modulated slider position more visible (contrasting line, taller, dark border)
v0.3.6 (2026-04-17)
Audio
- Per-sample envelope processing (smoother note-on/off transitions)
- Voice steal cleanup (no more amplitude burst on reused voices)
- Fold and converge drag smoothing (per-sample layer weight interpolation)
Scanner
- Scale mode fixed: filters partials by actual played note pitch class
- Mode button shows ALL / NOTES / SCALE with distinct colors
v0.3.5 (2026-04-09)
Critical Fix
- Eliminated speaker-damaging gain spike during overtone scan (uninitialized partial gain array caused 10^16 amplitude spikes when scanner re-spotlighted a previously muted partial)
v0.3.4 (2026-04-09)
Audio
- Envelope clicks eliminated (per-sample interpolation at all ADSR breakpoints)
- Fold/open zipper eliminated (per-sample partial gain interpolation)
- Voice stealing picks the quietest voice instead of round-robin
- Auto-gain snaps correctly on first note from silence
New
- JI Root Lock: LOCK button pins just intonation tuning to the selected scale root
- Single-click scale selection
- Drive always active regardless of FX bypass setting
Help
- Per-button help for GIN, TONIC, LOCK, hover mode, scale browser
- Partials Advanced controls (converge, phase, re-excite) fully documented
- Help bar wraps to multiple lines, brighter text
Architecture
- ADSRState shared struct replaces three copy-pasted envelope blocks
- Speculative fixes from debugging cleaned up
v0.3.3 (2026-04-07)
Fixes
- Voice retrigger click eliminated (stale gain state was causing pop on repeated notes)
- Same-note retrigger preserves envelope (no longer cuts release tail)
- Releasing voices no longer stolen (release tails play out naturally)
- Onset ramp changed from linear to exponential (removes zipper on note attack)
- Gain staging: velocity normalized to 0-1 range (volume slider usable across full range)
- Scanner shape smoothing extended (click only in top 10% of slider)
UI
- “PARTIALS: SOLO” label on hover mode button
- Vodka and Sub controls removed (pending redesign)
v0.3.2 (2026-04-07)
Fixes
- Envelope timing restored (attack, decay, release were too fast in v0.3.0)
- Phase coherence restored (sawtooth displays correctly in oscilloscope)
- Decay-to-sustain transition smoothed on all three envelopes (no click at breakpoint)
- Debug file access removed (no more Desktop/Downloads permission prompts)
New
- Per-slider help text (hover any control for a description of what it does)
- Noise ADSR envelope with curve display and draggable handles (same UI as Env 1/2)
- Windows VST3 updated to current codebase
v0.3.0 (2026-04-05)
First signed and notarized release. macOS 11.0+ (Big Sur and later).
New
- Pluck — per-voice filter bypass transient. Bypasses the lowpass filter for a configurable duration on each noteOn, creating a bright harmonic attack that settles into the filtered tone. Lives in the Noise section, routable via mod matrix.
- Noise ADSR — dedicated per-voice envelope for the noise generator, independent from Env 1. Full ADSR with curve display and draggable handles. Enables breath attacks, percussive noise bursts, and sustained noise textures.
- LFO2 delay — paraphonic fade-in for LFO2 modulation. Resets on the first note of a phrase, cubic ramp curve, 50ms to 10s range.
- VCA intensity — bipolar envelope depth control. Below 75% flattens the contour, above 75% exaggerates it. Default 75% = normal envelope.
- 4 new presets: Koto Guitar, Spooky Drops, Strange Sitar, Brashness
Sound
- Envelope timing matched to web version (attack, decay, release all use correct formula)
- Envelope applied per-sample (preserves exponential release curve)
- Zero attack = instant onset at noteOn
- Filter cutoff resets on preset switch (eliminates first-note brightness bug)
- Reverb and delay buffers cleared on preset switch (no bleed between presets)
- Limiter lookahead prevents first-note overshoot
- Random phase initialization prevents constructive interference transient
- Converge and stretch smoothed to prevent zipper noise
- Scanner shape slider scales smoothing: click at max isolate, smooth crossfade when backed off
UI
- Gear fill arc centered at 12 o’clock (was offset)
- Off-default dots positioned left of track (clear of gear icons)
- Help text rewritten with actual explanations
- Scan mode help shows current mode description
- Wave buttons: saw+/saw- labels
- Fold/partials gear drag-to-adjust in matrix HUD
- Panic button hard-kills all voices
- Window size persists across launches
- Default window height increased (no scrolling needed)
- Keyboard and display block fixed height (only controls stretch on resize)
- Auto-deploy to Desktop on every build
Build
- JUCE 8.0.9
- macOS 11.0 deployment target (runs on Big Sur through Sequoia)
- Apple Developer ID signed and notarized
- .pkg installer (AU + VST3 + Standalone)
v0.2.1-beta (2026-04-02)
Modulation
- Mod matrix routes fully reflected in DSP
- Mod wheel → LFO2 Depth → Temperament chain for expressive JI vibrato
- Live modulation visualization on every routed slider
- LFO2 depth slider shows live bipolar sweep at LFO rate
New
- Tonic button, mono legato, chord label above keyboard
- LFO2 waveform preview canvas
- Sync rate shows musical divisions
- FFT 2048 resolution with C note markers
v0.2.0-beta (2026-04-01)
New
- Dual-thumb Clamp slider in Partials Advanced (harmonic floor/ceiling)
- Dual-thumb Range slider in Scanner
- Sculpt phase toggle row (24 per-partial phase inversion buttons)
- Scale matching with percentage scores and color coding
- Harmonic gate capture mode (freeze chord, click button to re-capture)
- Green scale indicators on keyboard
- Draggable fold/partials HUD values on matrix with gear icons
- Tonic button fully wired (ducks non-root intervals, boosts root overtones)
- LFO2 waveform preview canvas with shape selector inside
- LFO2 Depth is a mod destination (mod wheel → LFO2 → temperament chain)
- Morph is a mod destination with gear icon
- Mono legato with glide return to held note
Sound
- Mod matrix actually works — all routes now affect DSP (was computed but never applied)
- Stretch, converge, fold, temperament all respond to mod routes
- Scanner spotlight smoothing (no clicking on step transitions)
- Harmonic gate matches web binary pitch-class matching
- Per-sample volume interpolation (no zippering)
- Cubic volume taper (better low-end resolution)
- Converge crash fix (divide-by-zero guard, Windows/Ableton)
- NaN output safety net at final stage
- JI temperament modulatable by LFO/expression for unique vibrato effects
UI
- Output section reorganized: Width, Drive, Output, Pan + SUM/AUTO toggles
- Gear icons: web-matched rendering, drag to adjust amount, shift-click to zero, double-click to zero
- Matrix display reflects GIN (no-sub) and clamp (floor/ceiling)
- Keyboard display reflects sculpt gains (square wave hides even partials)
- LFO rate extended to 500 (nonlinear curve, useful range preserved)
- Scope waveform: normalized to peak, cross-correlation trigger lock
- Brighter Lissajous (direct screen draw + phosphor trail)
- Mod matrix collapsible with visible chevron (moved to center column)
- Default layout: Filter, Gate, Noise, Matrix, Settings, Effects, Modulation collapsed
- Slider tracks wider (more throw for fine adjustments)
- Scale selector with manual double-click detection
- Partials list shows up to 24 (was 15)
- Help bar font larger
Coming next: Column spacing polish, standalone preset save, scope waveform view improvements
v0.1.9-beta (2026-03-31)
Sound Quality
- Drive at zero = clean passthrough (was always distorting)
- Volume/gain taper matches web version
- Per-sample envelope interpolation eliminates zippering
- Single-knob limiter/compressor with draggable threshold on scope meter
- Same-note retrigger preserves oscillator continuity (no click)
- Instant release at zero (percussive cutoff)
- Hard attack at zero (no onset softening)
Envelope
- Zone-based ADSR canvas: 25% attack, 25% decay, 50% sustain+release
- Zero values = true vertical lines (right angles)
- 3 draggable handles with large hit targets
- Horizontal ADSR sliders (2×2 compact grid)
- Blue curve + dots matching web
UI
- Slider reorganization: Output = Width + Gain, Settings = Drive/Pan/Detune/Glide/Mono
- RAND button in preset bar
- Scope: analog glow, brighter traces, cleaner info text
- Phase slider now bipolar (fills from center)
- Tab switching fixed (can return to Partials from Scale)
- Slider tracks visible against background
- Solo doesn’t activate on held notes
v0.1.8-beta (2026-03-30)
Fixes
- Sustain pedal: notes now release when pedal comes up
- Smoother envelope release (exponential, tighter cutoff)
New
- Draggable ADSR handles — click and drag breakpoints on the envelope canvas
- Horizontal ADSR sliders (A+D / S+R in compact 2×2 grid)
- VCA and VCF are mod matrix targets with gear icons
- Envelope curve and dots are blue (matching web)
v0.1.7-beta (2026-03-30)
Fixes
- Universal binary (Intel + Apple Silicon) — fixes “incompatible” in Logic on M-series Macs
- License key works in either activation field
- Residents auto-provisioned on first activation (no setup needed)
- All license types accepted (was rejecting purchasers in 2FA flow)
New
- Copy Diagnostics button — copies crash logs + system info to clipboard for support
- Admin tools:
/plugin-license,/plugin-deactivatein Discord - Harmonic Synth role auto-provisions licenses for residents and instructors
- Spreadsheet tracks active machines, IPs, and check-in times
v0.1.6-beta (2026-03-30)
Visual Refresh
- Colored left accent borders on all modules matching the web version
- Section headers: accent-colored uppercase text with chevron fold + ON button
- Near-transparent module backgrounds (glass effect, not solid grey)
- Thinner slider tracks (3px) with full-opacity accent fills
- Consistent internal padding across all sections
- Gear icons properly spaced from labels
- Uppercase slider labels matching web typography
New
- Tempo sync for scanner rate and delay time (locks to DAW BPM)
- 9 mod sources: added Aftertouch, Expression, Pitch Bend
- Scale search in partials/scale panel (type to filter)
- Report Issue button in Settings opens Discord
/plugin-licenseDiscord command for admin key generation
Layout
- Partials Advanced section: blue accent, Re-Excite first
- Module spacing increased for readability
v0.1.5-beta (2026-03-29)
New
- Mod matrix with gear icons on every routable parameter (9 sources: LFO 1/2, Env 1/2, Velocity, Mod Wheel, Aftertouch, Expression, Pitch Bend)
- Click any gear icon to assign a mod source — no need to find it in the grid
- Scale search — type to filter all 39 scales by name, including world music aliases
- Scanner highlights current partial in real-time (sculpt bars, matrix XY pad, partials list)
- Partials Advanced section (Converge, Phase, Re-Excite) separated from Tuning
- Tempo sync for scanner rate and delay time — locks to DAW BPM with musical divisions
- Support button in Settings — opens Discord from inside the plugin
- Windows VST3 build (untested)
Improved
- Note-on transient eliminated (5ms onset ramp per voice)
- Effects bus no longer distorts (delay buffer clamping, reverb gain compensation)
- Limiter only catches true peaks (-1dB threshold, was over-compressing at -12dB)
- Slider values show on hover instead of always visible
- More vertical space between sliders
- Wider column gaps prevent sections from overlapping
Fixed
- Activation UI renders reliably on all launches (rewrote as paint-based, not JUCE components)
- Discord verification codes delivered via private threads (not public forum)
- Username resolution — enter Discord display name, not just snowflake ID
- Purchase flow returns to correct page with working download links
Known Issues
- Note-on still has slight compressor character on some patches
- Scanner partial transitions can click
- Fundamental may ring after note release on certain sounds
- Visual layout differs from web version (accent borders, header styling, proportions)
- Scale/root selectors still use arrows in Tuning (dropdown planned)
- Not code-signed — macOS users need to right-click → Open on first launch
v0.1.4-beta (2026-03-29)
New
- Keyboard scale clamping — notes snap to selected scale
- Keyboard pitch glide — drag across keys for smooth pitch slides
- Scale detection persists after notes release
- Help text bar below the display panels
- Paste button loads presets from clipboard (copy URL from web synth)
- Share button exports current sound as web URL
Improved
- Harmonic levels tuned to match the web synth
- Smoother note release
- Scanner wave order corrected (saw/tri/saw-/rnd)
- Better visual contrast and brighter scope traces
- FFT display uses line graph matching the web
- Slider values always visible
Fixed
- Fold crossfade sub-bass energy
- Filter tracking follows scanner position
- Effects bypass passthrough
- Drive parameter controls saturation amount
- Keyboard harmonics display on MIDI input
v0.1.3-beta (2026-03-28)
New
- Mod matrix (6 sources × 26 destinations)
- Chord detection in partials panel
- Scale matching with ranked results
- Settings section (transpose, pitch bend range, BPM, randomizer)
- Info scope mode with help text
- Harmonic gate capture/follow/split modes
- LFO 2 delay, sync, shape controls
- Envelope 2 one-shot and invert
Improved
- Per-voice polyphonic filter with VCF envelope
- Keyboard range extended to A0–C9
- 13 factory presets from web synth
- Scan step highlighting in sculpt bars
- Gin/Tonic buttons on matrix display
v0.1.0-beta (2026-03-28)
Initial beta release.
- Additive synthesis with 24 partials, 8 octave layers
- Fold crossfade, overtone scanner, harmonic gate
- Sculpt morph (saw/square/triangle/pulse)
- AU + VST3 for macOS