refactor(capture): expose offline tail as docked-panel toggle

Replace the ...-with-tail variant actions with a pure tail_control module +
a docked-panel footer toggle (Off/Auto/Manual) read by CAPTURE_ITEM/TRACK.
Default None (byte-identical); Manual fixed 2s, in-memory session lifetime.
Tail mechanism unchanged; retired the variant ids.
This commit is contained in:
2026-07-23 17:32:19 -04:00
parent 2d225258b4
commit 9a9339b90b
11 changed files with 363 additions and 90 deletions
+13 -26
View File
@@ -179,38 +179,25 @@ RazorRange razorUnionBounds(const std::vector<RazorRange>& ranges) {
}
const std::vector<CaptureActionDef>& captureActionTable() {
// Built once (function-local static): two SCOPE actions x two tail variants.
// The None rows are exact bounds (byte-identical to today); the …_TAIL rows are
// the paired TailMode::Auto "…with tail" variants (Daniel's lean over silently
// flipping the exact-bounds default — spec §Open questions). Ids are FOREVER-
// STABLE — never edit a shipped string. Each action infers its range
// (razor-else-time) at fire time and enforces its FX-scope invariant via
// fxBypassPlanFor. The M7 CAPTURE_TRACKS_WET / CAPTURE_ITEMS_WET /
// CAPTURE_RAZOR_WET ids are RETIRED (mirror-unregistered in main.cpp); the
// CAPTURE_MASTER scope action is REMOVED (its id is likewise mirror-
// unregistered) — to capture the master you render a track.
// Built once (function-local static): two SCOPE actions, item + track. Both
// exact bounds by default; the tail mode a capture applies is read from the
// docked-panel setting at fire time (tail_control + bank_panel), so tail is NOT
// a per-action variant. Ids are FOREVER-STABLE — never edit a shipped string.
// Each action infers its range (razor-else-time) at fire time and enforces its
// FX-scope invariant via fxBypassPlanFor. The M7 CAPTURE_TRACKS_WET /
// CAPTURE_ITEMS_WET / CAPTURE_RAZOR_WET ids are RETIRED (mirror-unregistered in
// main.cpp); the CAPTURE_MASTER scope action is REMOVED (its id is likewise
// mirror-unregistered) — to capture the master you render a track.
static const std::vector<CaptureActionDef> table = {
// Item scope, exact bounds — item/take FX only.
// Item scope — item/take FX only.
{"CEREBELLUM_REASAMPLER_CAPTURE_ITEM",
"ReaSampler: capture selected item(s)", "item",
CaptureScope::Item, TailMode::None},
CaptureScope::Item},
// Track scope, exact bounds — item FX + the track's own FX.
// Track scope — item FX + the track's own FX.
{"CEREBELLUM_REASAMPLER_CAPTURE_TRACK",
"ReaSampler: capture selected track(s)", "track",
CaptureScope::Track, TailMode::None},
// Item scope with Auto tail — captures the take-FX decay past the range end,
// trimmed to -72 dB. NEW forever-stable id.
{"CEREBELLUM_REASAMPLER_CAPTURE_ITEM_TAIL",
"ReaSampler: capture selected item(s) with tail", "item",
CaptureScope::Item, TailMode::Auto},
// Track scope with Auto tail — captures the track's own reverb/delay decay
// past the range end, trimmed to -72 dB. NEW forever-stable id.
{"CEREBELLUM_REASAMPLER_CAPTURE_TRACK_TAIL",
"ReaSampler: capture selected track(s) with tail", "track",
CaptureScope::Track, TailMode::Auto},
CaptureScope::Track},
};
return table;
}