Commit Graph

319 Commits

Author SHA1 Message Date
daniel 5d3289f0bc fix(vst): declick rev 2 — difference-seeded ungated takeover ramp (rev-1 (1-amp) gate zeroed it on Trigger/zero-attack); preview card opt-in 2026-07-28 08:49:07 -04:00
daniel 2ef3514bc7 fix(preserve): prime SOLA rings with real source (zero-latency, gap-free onset) + sub-sample splice alignment — clean repitch C1..C8 2026-07-28 08:49:05 -04:00
daniel 3e3b79d78a Merge pS-ga-preserve: correlation-aligned SOLA splices fix repitched-Preserve garbage; ratio-scaled fade safe past +24st; spectral-purity test 2026-07-28 07:00:32 -04:00
daniel 157eb8c624 Merge pS-ga-voicesteal: declick every takeover (mono retrig + poly at-cap steal), gated on envelope complement; over-cap steal proven exactly-one 2026-07-28 07:00:24 -04:00
daniel 5056b5fc3b Merge pS-ga-stereo: pin stereo bus (kills dual-mono hard-right pan) + auto-default channel mode from capture (v9) 2026-07-28 07:00:14 -04:00
daniel 39ea6ce7db fix(sampler_core): gate takeover declick by (1-amp) to remove zero-attack +6 dB blip and long-attack notch; clamp seed to +/-1; add zero-attack test 2026-07-28 06:59:05 -04:00
daniel 3d0406ef64 test(pitch_shift): tighten purity f0 to 1/196 so revert-of-fadeLen_ fails; add hop guard; clamp fadeLen_ in double before int64 cast 2026-07-28 06:59:04 -04:00
daniel 66f2e402b0 fix(instrument_drop_win): UTF-8 temp path, PID collision guard, embed-strip excluded from drop hotspot 2026-07-28 06:37:42 -04:00
daniel e435ab1b8f fix(review): dead silenceFlags store removed; channelModeFor extracted + tested; auto-default + drop comments corrected; v9 constant minted 2026-07-28 06:37:39 -04:00
daniel 436a685984 fix(pitch_shift): ratio-scale splice fade so +24st up-shifts never read stale data; normalize SOLA correlation by candidate energy; tests bracket 4x/0.5x + unity/latency asserts 2026-07-28 06:37:38 -04:00
daniel 056ccd003e fix(voice): declick every takeover of a sounding voice — mono retrig/fallback and poly at-cap steal; same-block double-steal keeps its seed; over-cap repro proves the engine steals exactly one voice per note-on 2026-07-28 06:37:36 -04:00
daniel b4dd6dc9f1 fix(drop-fx): inject via .vstpreset + TrackFX_SetPreset (vst_chunk is REAPER-framed, raw bytes silently no-op); FX hotspot now prefix tcp.fx*/mcp.fx*/fx_* 2026-07-28 06:19:29 -04:00
daniel 3e6629a867 fix(vst): pin output bus to stereo (mode is decode-only) killing the hard-right pan; auto-default channel mode from the loaded capture (state v9) 2026-07-28 06:19:28 -04:00
daniel 22d7893431 fix(preserve): correlation-aligned splices replace dual-tap OLA — fixed w/2 tap offset anti-phase-cancelled crossfades (beating/partials on repitched sines); spectral-purity test added 2026-07-28 06:19:26 -04:00
daniel a66acb7473 Merge pS-fb1-sampleview: FB1 (r11) Sample-view recompose — knob deck, full-width hero, curve popup, post-mixer master gain (v8) 2026-07-27 23:38:30 -04:00
daniel e2c73e30d6 fix(vst): master-gain per-sample ramp (no zipper/click); voice-count commits once on release; minor review items 2026-07-27 23:30:27 -04:00
daniel 43155cf320 Phase S FB1 (r11): Sample-view recomposition — knob deck + elastic full-width hero + curve popup w/ right-click delete + post-mixer master gain (ComponentState v8) 2026-07-27 23:08:04 -04:00
daniel 247d1034b0 fix(comments): correct canary justification and expand failure guidance in padding tests 2026-07-27 22:59:08 -04:00
daniel 3790677097 bump to 0.9.8; add padded-canary build (app_version_padding_tests)
Canary re-proven on this base: reconstruct-from-components trips the
fixture checks; an unpadded fixture trips the non-vacuity assertion.
De-literalizes stale version examples in comments.
2026-07-27 22:51:16 -04:00
daniel 0c06bbad2c Merge p10-w1-t2-drop-action-buttons: remove dead action_buttons module 2026-07-27 22:38:40 -04:00
daniel 051b347e93 Merge pS-voice: voice-system redesign — user-set polyphony, mono (retrig|legato), isolated preview card, two-tier panic (v7); incorporates FA1 realtime fixes 2026-07-27 22:14:09 -04:00
daniel 080a7be8ca fix(voice): CC 120 hard-stops voices (incl. Trigger); Mono sizes voices_ to 1; comments corrected
CC 120 -> allSoundsOff/hardStop (immediate silence, stops Trigger one-shots); CC 123 -> allNotesOff/releaseAll (release, unchanged). Mono VoiceEngine sizes voices_ to 1 structurally. Legato same-note re-press edge documented. Three new tests.
2026-07-27 22:08:56 -04:00
daniel cd64be9129 remove dead action_buttons module (superseded by action_bar in Phase L)
Deletes src/action_buttons.{h,cpp} and tests/test_action_buttons.cpp;
removes the static library, test target, and reaper_reasampler link
entry from CMakeLists.txt; scrubs all dangling comment references.
2026-07-27 22:04:27 -04:00
daniel cc64def2d0 fix(voice): Trigger legato keys on held-stack depth, CC123 allNotesOff clears mono stack, voice-param edits rebuild from decoded PCM (no re-decode), mono sizes 1 shifter ring 2026-07-27 21:54:03 -04:00
daniel 7354f471c6 test(app_version): decouple assertions from the hardcoded version literal
Replace five literal "0.9.01" assertions with stampVersion()-relative checks and a parse round-trip; add testLeadingZeroFidelity() as a synthetic fixed-string pin so any REASAMPLER_VERSION bump no longer breaks the suite.
2026-07-27 21:53:41 -04:00
daniel 885b7f29a2 Phase S voices: user-set polyphony, mono stack (retrig|legato), isolated preview card, idle-drain retirement; unity bypass preview-only (v7) 2026-07-27 21:29:30 -04:00
daniel d9321eaf3a FA1: unity-Preserve bypass kills preview onset latency; drain-slot reload keeps voices ringing through curve edits; velocity path proven end-to-end 2026-07-27 19:50:21 -04:00
daniel 2b8ab4abe4 Merge pS-fa3-waveform: gap-free per-column min/max waveform render (columnMinMax in peaks, shared across panel + editor) 2026-07-27 19:47:49 -04:00
daniel 69d5621f51 Merge pS-zonebleed: fix zone-bleed (3a) — Sample-face zone reconcile so the played zone matches the drawn one 2026-07-27 19:47:09 -04:00
daniel 6056302752 Merge pS-fa2-envmodel: fully-editable bounded amp envelope nodes (Gate + Trigger) 2026-07-27 19:47:02 -04:00
daniel 1e645adcef fix(draw_kit): reclaim 4x waveform oversample; relocate waveformColumnCount to component_geometry
kWaveformOversample set to 1 (was 4) — overbinning produced byte-identical pixels because columnMinMax exact partition already makes the draw gap-free. Comments credit columnMinMax, not oversampling.
2026-07-27 19:37:53 -04:00
daniel 7fd812bd34 fix(vst): zone-bleed (3a) — reconcile the Sample-face zone on load so the loaded sample zone is the one first-match resolve plays 2026-07-27 19:09:53 -04:00
daniel cf93d4dc50 fix(param_slider): 7->5 o'clock arc (50% straight up), seam contract single-sourced, boundary/normDeg/wrap-boundary fixes 2026-07-27 19:09:51 -04:00
daniel b3c9fad9ba fix(waveform): 4x-oversampled min/max envelope, columnMinMax homed in peaks, panel routed through shared drawWaveform — one gap-free algorithm on all surfaces 2026-07-27 19:09:50 -04:00
daniel 99f377db28 FA2: param-domain Gate schematic + 8px node min-sep (all nodes grabbable at defaults); cross-mode drag guard; double-clamp px overflow fix 2026-07-27 19:09:47 -04:00
daniel 6c0bb4c204 feat(param_slider): radial KNOB primitive — parameterized 6->4 o clock arc, needle endpoint, vertical-drag value map, circular hit-test (FA4) 2026-07-27 18:25:07 -04:00
daniel 20308c842e fix(waveform): per-column min/max envelope fill eliminates gaps in steep segments 2026-07-27 18:25:05 -04:00
daniel d5d1902ea4 FA2: bounded-schematic Gate envelope (15% sustain reserve, in-bounds release) + zero-fade-out grabbable via nearest-node hit-test; all nodes clamp in-canvas 2026-07-27 18:25:03 -04:00
daniel 0e8b1b72cf S-VIEW-10: velocity-curve editor UI — draggable spline box beside the Sample hero + in the Zone panel, all math through the pure velocity_curve module 2026-07-27 15:51:36 -04:00
daniel 21c3656bf7 Merge pS-w2-t2-velcurve: velocity->amp transfer curve (velocity_curve spline + zones-payload v7 + Voice::start apply) 2026-07-27 15:00:10 -04:00
daniel 026ca90217 vst: curve velocity_curve eval with a monotone cubic Hermite (Fritsch-Carlson) spline
True curved response, provably no overshoot outside [0,1]; collinear knots reproduce the exact linear ramp so linear()'s null-response stays bit-exact. Eval-only; v7 wire-format untouched. Adds spline tests.
2026-07-27 14:45:50 -04:00
daniel 8a7dc4b1c6 fix(trigger-seam): thread startFrame into both envelope converters; extract pure triggerPlayLength module + tests 2026-07-27 14:37:05 -04:00
daniel a1f9dcf6f8 S-VIEW-9: velocity->amp transfer curve (pure velocity_curve module + zones-payload v7 + Voice::start apply)
Default flat y=1 (R10-F1 Option A) replaces the linear velocity/127 at note-on — a deliberate, non-back-compat behavior change; v1-v6 blobs lift to the flat default.
2026-07-27 14:18:01 -04:00
daniel d38e4eef84 Merge pS-w1-t3-state: persist preview-trigger velocity as ComponentState v6 (S-VIEW-4 core) 2026-07-27 13:39:09 -04:00
daniel 912ce5b320 Merge pS-w1-t2-keytrk: per-zone keyTrack scalar + ratio math in both repitch engines (S-VIEW-6 core) 2026-07-27 13:38:56 -04:00
daniel 2b83447189 Merge pS-w1-t5-drop: fix drop-to-FX hotspot classifier, narrowed to tcp.fx/mcp.fx (S-VIEW-BUG-1) 2026-07-27 13:37:58 -04:00
daniel 33e38c69fb Merge pS-w1-t4-kbd: keyboard_strip isNaturalKey predicate (S-VIEW-7 core) 2026-07-27 13:37:32 -04:00
daniel 5870b18362 fix(instrument_drop): narrow FX hotspot to tcp.fx/mcp.fx, not bare tcp/mcp (S-VIEW-BUG-1) 2026-07-27 13:34:40 -04:00
daniel fef595be91 fix(drop): recognize TCP/MCP FX-button hotspot for instrument drop (S-VIEW-BUG-1)
The FX-hotspot classifier matched only fx_ (the FX-chain/floating windows),
so a drop on a track TCP FX button (info tcp*) never armed the drop and the
capture fell through to arrange as audio. Widen to fx_/tcp/mcp in a pure,
unit-tested predicate; shell calls it.
2026-07-27 13:26:10 -04:00
daniel 858f736466 feat(keyboard_strip): add isNaturalKey predicate for piano-pattern overlay (S-VIEW-7) 2026-07-27 13:26:08 -04:00