Commit Graph

336 Commits

Author SHA1 Message Date
daniel 5a859cc9bf docs(phase-s): fold velocity->amp transfer-curve editor into S-VIEW (r10)
Per-PerformanceZone state home, new pure velocity_curve module, application at
Voice::start(), Sample-view editor UI. New PLAN points S-VIEW-9 (foundation,
blocked by Wave 1 T-KEYTRK) + S-VIEW-10 (Wave 2 shell). Fork R10-F1 (flat-y=1
default is a non-back-compat behavior change) left open for Daniel.
2026-07-27 13:35:01 -04:00
daniel 3b9b78b82c docs(phase-s): settle S-VIEW velocity persistence + draggable nodes, single-pass on L3
F1 -> preview velocity persists via VST3 component state (v5->v6). F2 -> envelope nodes draggable via new pure envelope_edit module. Drop the two-pass L3 restyle framing; build on the merged L3 LnF. F3 remains open.
2026-07-27 12:57:08 -04:00
daniel 5ec84ab0eb docs: mark M9 abandoned in Phase Q framing; add L3 + bank_grid/tab_strip to CLAUDE.md
M9 deferred->abandoned in code-organization.md gate (disposition note removed).
CLAUDE.md: L3 identity clause, M9-abandoned line, bank_grid/tab_strip in module
list and targets table.
2026-07-27 12:51:38 -04:00
daniel 85eac37912 docs: close out Phase L L3 — archive to COMPLETED, mark landed in design-language doc
L3 (VST editor + embed-strip restyle) is on dev. Append its COMPLETED entry
and flip visual-design-language.md §5.3/5.4 from GATED to landed / Phase L
complete. PLAN.md + CONTEXT.md L3 edits already landed via the S-VIEW commit.
2026-07-27 12:50:00 -04:00
daniel 13b23801a0 docs(phase-s): spec three-view editor redesign (S-VIEW) — Sample/Browse/Zone 2026-07-27 12:46:43 -04:00
daniel c22a78bcba docs: reconcile CLAUDE.md with Phase S — two artifacts, vst3sdk submodule, VST module blocks + test targets 2026-07-27 12:10:13 -04:00
daniel 0ffa7a4e77 docs(plan): archive Phase S (S3-S18) to COMPLETED; PLAN keeps only the deferred S13 relay stub 2026-07-27 11:57:27 -04:00
daniel c53683e7da Merge pL-w3-vst-restyle: Phase L L3 — VST editor + embed strip restyled through the L1 kit (B pastel-on-grey + pastel spectral keyboard strip) 2026-07-27 05:37:07 -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 6b643bb089 docs(context): record ratified item auto-tag adoption rule
New items adopt the single mode of their track's pre-existing content; active-mode rule retained for new tracks, empty tracks, and multi-mode tracks. Reconciles spec with the fix-drop-lane-strand merge.
2026-07-27 05:04:00 -04:00
daniel 31faf25889 Merge fix-drop-lane-strand: dropped captures adopt the track's existing mode, preventing lane-strand of pre-existing items 2026-07-27 05:01:34 -04:00
daniel 8887995d7a fix(design-view): adopt pre-existing track mode on drop to prevent lane strand
A bank-panel capture dropped onto a track with pre-existing content was
auto-tagged into the active mode, forcing a multi-mode lane split whose
toggle silenced the pre-existing items. New items now adopt the single
mode of their track's prior content; deliberate splits stay on the
explicit item-move path.
2026-07-27 04:59:03 -04:00
daniel e0d4358452 Merge phase-s: Phase S complete — ReaSampler 9000 VST3 sampler (S1-S18), editor scale + control surfaces (S12), drop-and-load (S17), editor drop-accept (S13 relay degraded per spec) 2026-07-27 04:46:45 -04:00
daniel 6a014114c2 refactor(bank_panel): factor resetDragState() helper; fix WM_CAPTURECHANGED missing instrumentDropTrack reset
All eight drag-state fields cleared through one canonical helper.
WM_CAPTURECHANGED now resets instrumentDropTrack (was missing per doc-contract).
WM_DESTROY and closePanel gain dropKind/dropBankId resets (inert on teardown; correct for symmetry).
2026-07-27 04:46:30 -04:00
daniel af557fdc25 Merge ps-w12-drop-to-load: S17 drop-and-load (InstrumentDrop gesture + vst_chunk inject); S13 editor drop-accept, relay degraded per spec 2026-07-27 04:34:01 -04:00
daniel 3440ddb268 fix(instrument_drop_win): make performInstrumentDrop all-or-nothing
On chunk-write failure, call TrackFX_Delete(track, fxIndex) to remove
the just-added empty FX instance before returning false. Signature
verified at reaper_plugin_functions.h:7236. Update the header comment
from "leaves at most the added FX" to the new all-or-nothing contract.
2026-07-27 04:34:01 -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 06494c654e Merge ps-w11-editor-scale: S12 editor scale + S15/S16 control surfaces (seconds-domain ADSR, zones payload v5) 2026-07-27 04:26:35 -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 ddc2ec1e75 docs(plan): tick S9/S15/S16/S18; annotate Preserve as hand-rolled OLA (WDL held as swap) 2026-07-27 04:20:34 -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 f79b9cafa3 Merge ps-w10-vst-channel: S18 VST3 channel isolation 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
daniel 1193a52ea4 Merge ps-w9-t2-modes: S15/S16 sampling modes + pitch engines 2026-07-27 04:18:03 -04:00
daniel bab82d4c43 S18: extend channel-pairing static_assert to all four UID words 2026-07-27 04:16:49 -04:00
daniel 8785cbe646 Merge ps-w9-t1-sync: S9 bank-generation change-detection + assignment reader 2026-07-27 04:16:49 -04:00
daniel 5dcd5d0d9d fix(comments): correct two misleading impl comments in sampler_core (rescan vs tally; re-dispatch vs recursion) 2026-07-27 04:16:49 -04:00
daniel fe55a9a96e feat(vst): S18 VST3 channel isolation — beta ReaSampler 9000 pairs with beta extension only
Fork the VST3 class UID (beta UID minted+frozen), on-disk name, and display
name by the one channel bit via app_version; couple UID selection to the
channel at compile time so a refactor can't split identity from data.
2026-07-27 04:16:49 -04:00
daniel 0e9ef05c75 docs(product): spec S18 — VST3 channel isolation (beta ReaSampler 9000 pairs with beta extension only) 2026-07-27 04:16:49 -04:00
daniel be67c93b39 Merge ps-hotfix-mojibake: ASCII-only strings on the ANSI draw path 2026-07-27 04:16:49 -04:00
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