Bake window derives itself: %-knob fold, declick pad, Gate held to exhaustion, preview velocity; Hold is the one knob a loop needs

This commit is contained in:
2026-08-01 20:26:04 -04:00
parent d3894dae6d
commit 19aeb92775
36 changed files with 1040 additions and 274 deletions
+25
View File
@@ -0,0 +1,25 @@
// bake_hold.cpp — see bake_hold.h. Pure math; no host types.
#include "core/instrument/ui/bake_hold.h"
#include <algorithm>
namespace reasampler::instrument::ui {
namespace {
constexpr int kLastIndex = note::kDivisionCount - 1;
} // namespace
note::Division bakeHoldFromNorm(double norm) {
if (!(norm > 0.0)) return note::divisionAt(0); // also catches NaN
if (norm >= 1.0) return note::divisionAt(kLastIndex);
// Round to nearest so each rung owns an equal slice of the knob's travel; divisionAt
// clamps, so the +0.5 landing on kDivisionCount at norm just under 1 is harmless.
return note::divisionAt(static_cast<int>(norm * kLastIndex + 0.5));
}
double bakeHoldNorm(note::Division hold) {
return static_cast<double>(note::divisionIndex(hold)) / static_cast<double>(kLastIndex);
}
} // namespace reasampler::instrument::ui