Render in place: a track's output to a new sibling, source to the bench

This commit is contained in:
2026-08-02 14:17:55 -04:00
parent a0fd931dcb
commit 5c0f5f1591
21 changed files with 727 additions and 32 deletions
+16
View File
@@ -30,6 +30,14 @@ enum class WavBitDepth {
Float32,
};
// Where the render lands. TWO VALUES, never a caller-supplied path string: the
// backend resolves each to a directory itself, which is what makes "write into the
// bank folder" inexpressible from the ProjectMedia side and vice versa.
enum class CaptureDestination {
Bank, // <projectDir>/reasampler_bank — every capture path
ProjectMedia, // the project's recording path — the render-in-place verb only
};
// One capture, independent of source mode.
struct CaptureRequest {
SourceMode sourceMode = SourceMode::MasterMix;
@@ -75,6 +83,9 @@ struct CaptureRequest {
// The one home for that fallback rule; both backends populate Sample::displayName
// from here rather than each spelling the condition out.
std::string label() const { return displayName.empty() ? baseName : displayName; }
// Default Bank: every existing entry point renders into the bank untouched.
CaptureDestination destination = CaptureDestination::Bank;
};
// Every failure is an explicit code, never a thrown exception across the REAPER boundary.
@@ -95,6 +106,11 @@ struct CaptureResult {
CaptureStatus status = CaptureStatus::RenderFailed;
Sample sample; // valid only when status == Ok
std::string message; // human-readable detail for the console log
// The file the render actually landed, absolute — the only handle a caller that
// banks nothing has on its own output (sample.relativePath is empty on the
// ProjectMedia destination). Set on the Ok path only.
std::string absolutePath;
};
// Deterministic offline-render backend: master mix / time selection / selected