Commit Graph

603 Commits

Author SHA1 Message Date
daniel 1e1d6bddbb S15/S16: Gate(AHDSR)/Trigger play modes + Varispeed/Preserve pitch engines + AD pitch envelope
Per-zone play params on SampleData; hand-rolled pure pitch_shift OLA for Preserve (WDL drags
windows.h); zone-payload v3 tail; RT-safe pre-warmed shifters + Preserve voice cap.
2026-07-27 04:16:48 -04:00
daniel 77e7c39171 fix(review): embed asymmetry comment, single-lock assign-marker, dedup-collapse test 2026-07-27 04:15:59 -04:00
daniel 66d47fb410 feat(S9/S8): bank-generation change-detection + instrument-side assignment reader
Extension stamps a monotonic bank_generation counter, bumped at content
mutations; the VST3 instrument polls it off-thread on an editor timer and
consumes assignment requests, refreshing playback hands-free.
2026-07-27 04:15:59 -04:00
daniel 37cb290cbc docs(product): S17 load-capture seam — settle on (B) component-state injection
Fold the decision into the existing phase-s S17 spec: (B) via
TrackFX_SetNamedConfigParm vst_chunk; (A) ext-state handshake rejected.
Flag the shared component-state blob format as an extension<->instrument
coordination dependency.
2026-07-27 04:15:08 -04:00
daniel 70d73ea798 fix(vst): replace non-ASCII em-dash/ellipsis in editor string literals with ASCII equivalents to fix mojibake on ANSI DrawTextA path 2026-07-27 04:15:08 -04:00
daniel 725f3e7d3c Merge ps-w7-ingest: S8 ingest through the bank (extension side) 2026-07-27 04:15:08 -04:00
daniel 7a191bde61 test: S7xS11 compose — stereo+startFrame+loop share one read head; v4 stereo envelope + v2 zone overrides round-trip together 2026-07-27 04:15:08 -04:00
daniel 75f717bd47 Merge ps-w8-t2-waveform: S11 waveform view + draggable loop points 2026-07-27 04:15:08 -04:00
daniel 373948c18a fix(ingest): convert-on-import to 32f WAV, undo-group bank+assign, overflow guards
Non-WAV sources decode via PCM_source::GetSamples and land as canonical 32f
RIFF/WAVE; hash taken post-conversion so re-imports dedup. Undo block covers
bank mutation + assign_request atomically. Overflow guards + adversarial tests.
2026-07-27 04:11:42 -04:00
daniel ac14d7b1fb Merge ps-w8-t1-stereo: S7 stereo channel mode 2026-07-27 04:11:42 -04:00
daniel 8074e21057 feat(S8): ingest through the bank — capture/import/drop into bank + assign to active instance 2026-07-27 04:11:41 -04:00
daniel 38238c66ac fix S11 review: extract upsertPickedOverride, restore map_ on drag-cancel, clamp start to frames-1, pin startFrame>loopEnd wrap test 2026-07-27 04:09:50 -04:00
daniel ee82b50fb7 Merge ps-w6-capture-first: S10 capture-first ReaSampler 9000 editor 2026-07-27 04:09:50 -04:00
daniel 4a3551b3b9 S7: stereo channel mode — core channel dimension, v4 mode state, VST3 bus negotiation, editor toggle
Per-instance mono|stereo (default mono, byte-identical). Stereo grows SampleData a 2nd
channel + a per-channel VoiceEngine render; decodeChannels applies the cross-mode policy;
setBusArrangements pins the mode's arrangement and restartComponent(kIoChanged) re-negotiates.
2026-07-27 04:09:50 -04:00
daniel bf1bf5283c docs(product): reshape S16 to Varispeed/Preserve pitch-engine modes (duration-preserving correction)
Per-zone toggle: Varispeed (classic, cheap) vs Preserve (duration-holding,
WDL_SimplePitchShifter candidate — per-voice RT viability assessed: pre-warm
settles onset latency + queue growth; quality basic; hand-rolled pure module
held as upgrade). Pitch envelope rides either engine. Fork S16-F1: default
mode is Daniel's call.
2026-07-27 04:09:50 -04:00
daniel 9743547dff S11: waveform view with draggable start/loop markers + zero-crossing snap
Pure waveform_view module (frame<->pixel markers, zero-crossing snap); per-zone
loop/start overrides on PerformanceZone with self-versioning zone payload; core
start-point read offset; editor waveform surface with drag machine.
2026-07-27 04:09:50 -04:00
daniel b9ad1ee18f fix S10 code-review findings: WM_CAPTURECHANGED, proportional drag, paintSetup root source, Add Zone dedup, strip-area helpers 2026-07-27 04:09:50 -04:00
daniel c64ab687bf docs(product): spec Phase S sampling modes (S15 Trigger/Gate) + pitch envelope (S16)
Gate: AHDSR + loops; Trigger: fade-in / %-length / fade-out, note-off-immune.
Start point joins the instrument-side overrides. Pitch env is a per-frame
ratio multiply on the existing core — no resampler rewrite. WDL swept:
sinc resampler held as optional upgrade; no elastique-class stretch in WDL.
2026-07-27 04:09:50 -04:00
daniel 7151e19432 S10: capture-first ReaSampler 9000 editor — browser, single-capture setup, zones toggle
Reverse S4 auto-select (empty=silence+empty state), add peak-thumbnail capture
browser + bank filter + keyboard-strip drag machine, v3 component state (selection
+ zones), and the S-NAME-1 filename/display rename (UID locked). MSVC min/max
macro collisions fixed post-implementation; 26/26 tests green.
2026-07-27 04:09:50 -04:00
daniel 991c190bb8 docs(product): reframe S10 capture-first (browser + single-capture setup); reverse S4 auto-select; settle S-NAME-1 filename rename 2026-07-27 04:09:50 -04:00
daniel 5de2183ce3 docs: detach design-system (S0-DS/S14) to Phase L; leave pointers
Remove S0-DS and S14 from Phase S PLAN/CONTEXT (moved to Phase L on dev),
restore S10's Depends-on without the kit gate; S10-S13 adopt the Phase L
kit when it lands rather than being gated on it.
2026-07-27 04:09:49 -04:00
daniel 3d6c0ab66a docs(product): system-wide visual design language (S0-DS kit + S14 panel refresh)
LICE verified sufficient from vendored WDL — current editor draws at its
floor (flat fills, raw GDI text); no framework shift needed, D-A holds.
Adds design-language doc (palette, three directions, motion policy),
S0-DS shared drawing kit before S10, S14 panel refresh.
2026-07-27 04:09:49 -04:00
daniel 8c9cf38780 docs(product): scope ReaSampler 9000 UX overhaul (S10-S13) + record instrument name
Post-DAW-test: name the instrument ReaSampler 9000; spec the better-than-RS5K
overhaul — S10 keyboard-strip keymap editor, S11 waveform + draggable loop
points, S12 scroll/search/direct-entry/ADSR, S13 drop-to-load via the S8 relay.
VST3 class UID locked unchangeable; S-NAME-1 (binary filename) is Daniel's call.
2026-07-27 04:09:49 -04:00
daniel dc5d36ff43 fix(vst): channel-derive the shared ext-state namespace (V4↔S4 reconcile)
ext_keys.h's kProjExtNamespace now delegates to app_version::extStateNamespace() so the beta instrument reads "reasampler_beta" — the namespace the beta extension writes — instead of stale stable. Link app_version into reasampler_vst.
2026-07-27 04:09:49 -04:00
daniel e9498c4290 docs(plan): tick S6 checkboxes; mark IReaperUIEmbedInterface must-verify as verified-by-S6 2026-07-27 04:09:49 -04:00
daniel 86502d2dba Merge ps-w5-embed-ui: S6 embedded TCP/MCP UI via IReaperUIEmbedInterface 2026-07-27 04:09:49 -04:00
daniel fdcb2db04c docs(plan): tick S5 checkboxes; reconcile performance-map persistence wording to component state 2026-07-27 04:09:49 -04:00
daniel 5453f4966c fix(embed): WM_GETMINMAXINFO size hints, remove dead selectedId_, fix selectedZone_ comment, decay embedPeak_ on early returns 2026-07-27 04:09:49 -04:00
daniel b653a4f6a7 Merge ps-w4-tier1-keymap: S5 Tier 1 — zoned keymap editor + performance-map persistence 2026-07-27 04:09:49 -04:00
daniel 03e760631c S6: embedded TCP/MCP UI via IReaperUIEmbedInterface
Inline keymap/level strip drawn into REAPER's embed bitmap, reusing the LICE
idiom. Pure embed_strip layout/hit-test (tested); processor exposes the embed
interface off queryInterface and publishes an RT-safe block peak for the level.
2026-07-27 04:09:49 -04:00
daniel ed2df9c1d5 docs: spec Phase S stereo (S7), bank-ingest (S8), change-detection (S9)
Settled 2026-07-26: per-instance mono|stereo mode with automatic bus
negotiation (S3-core extension); ingest routes through the bank, extension-
owned, instrument stays read-only; bank-generation counter for hands-free
recapture refresh. ME + drop-target SDK limits verified; spikes flagged.
2026-07-27 04:09:49 -04:00
daniel a3142bbe3e fix(comments): correct ZoneField button count/order; generalize single-zone setState seed comment 2026-07-27 04:07:10 -04:00
daniel 2356958930 S5 Tier-1: zoned keymap editor + performance-map playback/persistence
Zone editor in the IPlugView LICE surface, zoned resolution built off-thread into the
LoadedInstrument keymap with Tier-0 fallback, performance map in VST3 component state
with v1 back-compat. Pure resolve/build/serialize + geometry with CTest coverage.
2026-07-27 04:07:10 -04:00
daniel 6ae843345c Merge ps-w3-tier0: S4 Tier 0 — the bank plays (MIDI to core, live-state seam, LICE sample-pick) 2026-07-27 04:07:09 -04:00
daniel bb066fe1ab docs(plan): tick S3 checkboxes; resolve VST-host bridge must-verify entry 2026-07-27 04:07:09 -04:00
daniel b4b64ce68f fix(S4): close graveyard epoch ordering race; add canvas-clip + stride integration tests
Tag LoadedInstrument with installedAt; process() publishes that field (not a re-read
of reloadGeneration_) so the pruner's displacedAt <= seen bound is airtight. Also fixes
sampleRowHitTest canvas.bottom over-read and adds interleave-stride + canvas-clip tests.
2026-07-27 04:07:09 -04:00
daniel b0fc052113 Merge ps-w2-sampler-core: S3 pure sampler core (voices, ADSR, keymap, loop-aware repitch) 2026-07-27 04:07:09 -04:00
daniel 0cde457224 S4 Tier 0: the bank plays — VST3 marshals MIDI to the S3 core, reads the live bank + resolves WAV the M4 way, mono downmix, lock-free load handoff, LICE sample-pick 2026-07-27 04:07:09 -04:00
daniel 8dd74c6b3a docs(plan): tick S1/S2 checkboxes; correct bridge-read text to VST3 mechanism 2026-07-27 04:07:08 -04:00
daniel a04ef54eec fix(tests): rework testNoteOffReleasesNewestSameNote to actually prove newest-first release; add single-frame-loop test; add two comments in sampler_core.cpp 2026-07-27 04:07:08 -04:00
daniel 74d2e976e7 S3: pure sampler core — voices, ADSR, keymap, loop-aware repitch
REAPER-free and VST3-free voice engine with bounded stealing, ADSR
envelope, key/velocity keymap resolution, and repitch from root note
with loop-point sustain. Test target links neither SDK.
2026-07-27 04:07:08 -04:00
daniel 09f49441d9 Merge ps-w1-t2-sample-intrinsics: S2 Sample seam fields (rootNote + loop points) 2026-07-27 04:04:07 -04:00
daniel 72ac766a5b Merge ps-w1-t1-vst3-spike: S1 VST3 skeleton, IPlugView-LICE editor, REAPER bridge read 2026-07-27 04:04:07 -04:00
daniel b5a573aebb feat(bank_model): add Phase S seam fields (rootNote + loop points) to Sample
Additive optional MIDI root note and sustain-loop points with JSON round-trip and deserialize-boundary validation; capture leaves them empty (not derivable). Mirrors the provenance addition; BankIndex behavior unchanged.
2026-07-27 04:04:07 -04:00
daniel 3c2a7c45b2 feat(vst): stand up VST3 instrument spike (S1) — skeleton, IPlugView↔LICE editor, REAPER bridge read
Vendor Steinberg VST3 SDK (v3.7.9_build_61); add reasampler_vst.vst3 as a second, additive build artifact with pure editor-geometry + bridge-marshal helpers under CTest.
2026-07-27 04:02:28 -04:00
daniel 5595ba42f9 docs: record settled L3 decision — beta title band stays textual, no channel accent
Daniel (2026-07-27): the S18 beta channel title band gets no distinct
visual accent; L3 restyles it in the standard B pastel palette and the
beta-vs-stable distinction stays purely textual. Closes the one open fork
from the L3 readiness review.
2026-07-27 03:51:47 -04:00
daniel ba50cfb857 CLion files 2026-07-27 03:51:03 -04:00
daniel 8c65069fc3 docs(phase-q): reconcile gate to S+L3 and add naming-consistency dimension
Correct the Phase Q gate (L2 landed; outstanding is Phase S + Phase L L3;
D2 complete, M9 deferred). Add a grep-verified naming audit (code-organization
§2b) and forks Q-7/Q-8/Q-9; FOREVER-STABLE contract strings excluded.
2026-07-27 03:50:20 -04:00
daniel a434ef47f8 docs(plan): ground L3 readiness against landed Phase S surfaces
Both VST draw shells still draw flat off a local pre-L1 palette — L3
restyle confirmed live, not a born-in-kit no-op. Name the concrete gate
files, add the palette-reconcile point, enumerate the landed editor set.
2026-07-27 03:42:24 -04:00
daniel 40ee6bb6d1 Merge fix-empty-slot-drop: reorder drop lands in empty slots and beyond the extent (trailing row) 2026-07-27 03:32:16 -04:00