Ξ-W2-T1: the resample bake chain — instrument renders, extension banks, one click re-points and resets
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
// instrument_bake — the instrument's half of the resample chain: render the dialed sound
|
||||
// offline, stage it outside the bank, ask the extension to bank it, then re-point and go
|
||||
// neutral. UI thread only; nothing here is on any audio path.
|
||||
//
|
||||
// The extension is REQUIRED. Without it the bank has no writer, so the affordance reads
|
||||
// Disabled and this refuses rather than half-baking.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
|
||||
namespace reasampler::vst {
|
||||
|
||||
class ReaSamplerProcessor;
|
||||
class ReaperBridge;
|
||||
|
||||
// Whether a bake can run at all right now: a REAPER host, and the extension's bake action
|
||||
// registered. Cheap enough for the editor's sync tick, which is where the button's paint
|
||||
// state is decided — the control must never be enabled and then refuse.
|
||||
bool bakeAvailable(ReaperBridge& bridge);
|
||||
|
||||
struct BakeChainResult {
|
||||
bool ok = false;
|
||||
std::string message; // always populated — the editor prints it either way
|
||||
};
|
||||
|
||||
// Runs the whole chain against `processor`. On failure NOTHING has changed: no temp file
|
||||
// survives, no bank entry was added, no assign was written, and the dialed state is
|
||||
// exactly as it was before the click.
|
||||
//
|
||||
// MUST NOT be called from a mouse handler. It invokes a REAPER action synchronously — an
|
||||
// offline landing nested inside a click, with the mouse captured, re-pointing the very
|
||||
// instance whose frame is on the stack. The editor defers it to its own timer tick.
|
||||
BakeChainResult runBake(ReaSamplerProcessor& processor);
|
||||
|
||||
} // namespace reasampler::vst
|
||||
Reference in New Issue
Block a user