Commit Graph

63 Commits

Author SHA1 Message Date
daniel 36270e2064 fix(persist): use project-object identity to stop forked-bank cross-contamination
M4's GUID-only classifier read a tab-switch between two Save-As forks (shared
copied GUID, different paths) as a Save-As and clobbered a bank. Thread
sameProjectObject into classifyProjectTransition: a different object always
Loads, never relocates; a forked sibling gets re-GUID'd to diverge.
2026-07-22 21:28:54 -04:00
daniel 36dd5fd0f6 Merge dev (M5 bank_panel) into view-shell branch
# Conflicts:
#	CMakeLists.txt
2026-07-22 21:26:11 -04:00
daniel aa8b963fb3 Merge dev (Phase D1) into p1-w9-bank-panel
# Conflicts:
#	CMakeLists.txt
2026-07-22 21:07:59 -04:00
daniel 71a3b26a47 feat(bank_panel): docked bank grid with LICE waveform thumbnails (M5 Wave A)
Docked SWELL window toggled by a new action, drawing the current bank as
per-sample min/max thumbnails (PCM_source + peaks) with an in-memory cache.
Pure grid-layout/cache-key math in bank_grid (tested). Renames peaks::Sample
-> AudioSample to avoid colliding with bank_model::Sample.
2026-07-22 21:02:22 -04:00
daniel c068279aac feat(view): D2 view shell — apply mode toggle plan to live project
Reads I_FOLDERDEPTH into a FolderTree (pure view_tree helper, unit-tested),
snapshots to-be-parked tracks before parking, runs the D1 planner, and applies
park/restore flag + per-FX-offline writes under an undo block. Master and
mute/solo untouched; acts only on tagged tracks.
2026-07-22 20:55:50 -04:00
daniel 25cfb62d46 rename view_model -> view_mode_model; add shell-expands-FX test and parse-site comments 2026-07-22 20:37:17 -04:00
daniel 33ffb45a45 Add pure view_model core (Phase D1): N-mode registry, GUID-keyed membership, folder-tree visibility derivation, snapshot-based park/restore planner, JSON round-trip; new view_model_tests CTest target 2026-07-22 20:21:14 -04:00
daniel 53da916917 feat(persist): M4 bank persistence + Save-As relocation
Serialize BankIndex to project ext state ('reasampler'), reload on project
load, resolve paths project-relative. Save-As copies the bank to the new .rpp;
identity keyed off a minted GUID (not the recycled ReaProject*) so project
switches don't clobber banks. Pure classifyProjectTransition tested.
2026-07-22 19:55:09 -04:00
daniel a14d33aa75 Fix M3 capture: render format, project rate, unsaved-project handling
RENDER_FORMAT now uses the base64 float-WAV config (raw bytes were rejected
into a 16-bit/44.1 fallback); RENDER_SRATE pinned to the project rate.
Unsaved projects prompt Save then refuse if cancelled — no default-location
fallback. Harden deriveBankPaths against empty projectDir.
2026-07-22 17:02:15 -04:00
daniel d9ad8e4adf M3: offline-render capture spike (master-mix / time-selection)
ICaptureBackend/CaptureRequest seam + OfflineRenderBackend driving snapshotted
RENDER_* with dither/normalize forced off for bit-identical output, RenderFailed
via filesystem check, and a pure capture_paths lib with tests. Spike action registered.
2026-07-22 13:07:31 -04:00
daniel 4cb40f6e34 peaks: pure per-channel min/max envelope from interleaved PCM
New STATIC lib + peaks_tests (CTest), mirroring bank_model. Float samples,
per-channel (no fold); exact integer bin spans handle remainder, short
buffers, and degenerate inputs with no OOB. Bin-span math guarded against
size_t overflow for pathological binCount.
2026-07-22 09:23:03 -04:00
daniel 2862e1c865 Implement M1 bank_model: Sample + BankIndex, hash-dedup, tiers, JSON round-trip
Pure dependency-free core with self-contained JSON writer/parser. Absolute
paths (incl. drive-relative) rejected at the add boundary; \uXXXX decoded to
UTF-8 with surrogate pairs; malformed input returns nullopt.
2026-07-21 22:54:21 -04:00
daniel acfc9daabc Retire MPE scaffold; stand up reaper_reasampler pure-core skeleton
Rename CMake project/module to reaper_reasampler, delete mpe_model/mpe_view,
add minimal pure bank_model lib + placeholder CTest. main.cpp loads, logs to
console, keeps the action-registration seam commented with the forever-stable
CEREBELLUM_REASAMPLER_ action-id prefix.
2026-07-21 21:18:51 -04:00