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
40bcf0d56d
fix(editor): close curve popup on zone-count change; degenerate-rect guard + comment corrections
2026-07-28 00:09:13 -04:00
daniel
682c21509a
FB2: Zone panel adopts the r11 knob deck + curve popup (R11-F2 parity) — slider rows and inline curve box retired, zone-authoring affordances kept
2026-07-27 23:58:07 -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
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
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
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
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
88c122fcb4
fix(zone-view): Add Zone seeds narrow octave range so new zones survive reconcile
2026-07-27 19:38:03 -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
d982d14760
fix(velcurve-ui): caption overlap, add-in-ring data corruption, drag-off warn affordance
2026-07-27 16:05:05 -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
c2a9f2a814
fix(comments): soften "bit-exact" to "~1e-15 floating-point rounding" in velocity_curve
2026-07-27 14:59:35 -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
c12a374b88
Phase S Wave 2: three-view ReaSampler 9000 editor (Sample home / Browse modal / Zone)
...
Retire the flat toggle; Sample-home face wires the Wave-1 envelope overlay + draggable nodes, preview button + velocity knob, Mono/Stereo, key-track. Browse reduced to a confirm/cancel modal; Zone retained with piano-pattern strip. RT-safe off-thread preview-note mailbox added.
2026-07-27 14:17:58 -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
e08f7b827c
Merge pS-w1-t6-size: 1080p default window size + min floor (S-VIEW-SIZE-1)
2026-07-27 13:37:43 -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
9a2b752fe9
docs(envelope): add Trigger frames<->fraction seam note + zero-delta guard on fade nodes
2026-07-27 13:34:43 -04:00
daniel
5db620be78
fix(processor): close S-VIEW-4 previewVelocity persistence loop
...
Add previewVelocity_ member to ReaSamplerProcessor; populate it in
getState and restore it in setState so the field round-trips in the
plugin, not just in the pure unit test. Clamp 1..127 at the
deserialize read boundary in sample_map.cpp.
2026-07-27 13:34:39 -04:00
daniel
7528a53a2a
feat(vst-editor): bump default window to 840x560 + checkSizeConstraint floor (S-VIEW-SIZE-1)
2026-07-27 13:26:11 -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
daniel
b0b24c3e31
S-VIEW-4: persist preview-trigger velocity as ComponentState envelope v6
...
New top-level previewVelocity field (MIDI 1..127, mid default 64), sibling of
channelMode. Envelope bumped v5->v6; v5 and older blobs lift to the mid default.
Zones payload untouched (independent version axis). Round-trip + v5/v4-lift +
truncation tests added.
2026-07-27 13:26:07 -04:00
daniel
42dd30b2fe
S-VIEW-6: per-zone keyTrack scalar (0-200%, default 100%) with pure ratio math in both repitch engines
...
keyTrackedRatio is bit-identical to pitchRatio at 100%; keyTrack threads through PerformanceZone->ResolvedZone->KeyZone into baseRatio_, so Varispeed and Preserve both inherit it. Zones payload bumped to v6; older blobs lift to 1.0.
2026-07-27 13:25:53 -04:00
daniel
12a7d072ac
S-VIEW-3: add envelope_overlay + envelope_edit pure modules
...
AHDSR/Trigger params -> polyline forward map (overlay) and node hit-test +
clamped/monotonic pixel->param inverse map (edit) for the draggable Sample-view
envelope. Engine-free, unit-tested, wired into ctest. No shell changes.
2026-07-27 13:24:48 -04:00
daniel
774d753b4c
Phase L L3: restyle VST editor + embed strip through the L1 kit (B pastel + spectral strip)
2026-07-27 05:30:44 -04:00
daniel
26e2bf2fc6
S17 drop-and-load onto track FX button; S13 editor drop-accept (relay degraded)
...
S17: drag_out InstrumentDrop gesture + instrument_drop blob reusing the
instrument's own serializer; bank_panel FX hover-track + add-VST/vst_chunk
inject. S13 relay deferred (read-only bridge) — editor shows drop affordance.
2026-07-27 04:34:01 -04:00
daniel
b2a4533563
fix(comments): correct stale v3 "CURRENT" payload prose to v5 in sample_map
2026-07-27 04:26:35 -04:00
daniel
082c9b82c2
s12: thread project rate through v3 legacy lift; remove 44100 literals
...
kLegacyV3NominalRate removed. readZonesPayload, deserializePerformance, deserializeComponentState now take a projectRate for v3 frames→seconds. Rate fields default 0 (invalid). Four 44100 fallbacks replaced with assert+safe-return. 96k v3-lift test added.
2026-07-27 04:25:39 -04:00
daniel
a54af277e4
S12: store wall-clock ADSR/pitch-env as seconds, resolve to frames at live rate
...
Kill kTier0Nominal*, adsrNeedsRateResolve, tier0Adsr, gateAdsr. Zones payload v5 carries
seconds; v3 legacy reads convert at the frozen authoring rate; v4 (branch-only) dropped.
Editor sliders now seconds. Engine takes frames resolved at keymap build.
2026-07-27 04:25:38 -04:00
daniel
1d338318e7
fix: S12 R2 — marker-drag sets selectedZone_, ADSR rate-resolve, gateAdsr doc
...
Marker drag now sets selectedZone_ so single-capture controls stay reachable. Lifted/default ADSR rescales nominal 44100-Hz frame counts by sampleRate/44100 via adsrNeedsRateResolve; v4-authored zones skip rescale. gateAdsr documented vestigial.
2026-07-27 04:20:34 -04:00
daniel
7fb778206c
fix(S12 review): per-zone A/D/S/R reaches voice; zones payload v4 + v3 back-compat
...
Voice::start reads full zone ADSR instead of folding only holdFrames into instrument-wide gateAdsr. Wire format bumped to v4 (four new fields); v3 blobs lift A/D/S/R to kTier0Nominal* constants. Single-capture editor controls now reachable. Minor comment and geometry fixes.
2026-07-27 04:20:34 -04:00
daniel
4f30124ef7
S12: editor scale + S15/S16 control surfaces
...
Pure browser_scroll/note_entry/param_slider modules (+ CTest) for scroll,
type-to-filter search, numeric note entry, and the AHDSR/Trigger/pitch-engine/
pitch-env control panel. Editor shell draws + routes through them; params edit
the selected zone's ZonePlayParams via commitAndReload.
2026-07-27 04:20:34 -04:00