22g: NO-LUT test isolates gap to detector front-end; unified sidechain-clamp hypothesis (knee at 0dBFS, identical renders above)
This commit is contained in:
+14
-7
@@ -98,16 +98,23 @@ static void process_band_structural(
|
||||
constexpr double DRP = 0.2159;
|
||||
double rp = RP0 * std::pow(static_cast<double>(band.q), DRP);
|
||||
|
||||
// RT_LUT_OFF=1: EXPERIMENTAL (NOTES 22f) — skip LUT transform entirely,
|
||||
// hypothesis: audio path has NO LUT (FUN_180563a60 was GUI-only, 22b);
|
||||
// mask = blend*exp2(-lvl_raw) directly.
|
||||
static const int lut_off = getenv("RT_LUT_OFF") ? atoi(getenv("RT_LUT_OFF")) : 0;
|
||||
|
||||
for (size_t k = 0; k < nbin; k++) {
|
||||
double res_k = std::max(static_cast<double>(res[k]), 1e-12);
|
||||
double lvl = static_cast<double>(am[k]) / res_k * scale_factor;
|
||||
// dB-domain LUT (FUN_180563a60) on LEVEL before IIR/exp2: keeps both
|
||||
// quiet (t1kq) and loud (t1k) inputs inside the LUT domain [A,B],
|
||||
// avoiding the t<0 clamp collapse that mask-domain LUT hits on loud input.
|
||||
double dB = std::log10(std::max(lvl, 1e-12)) * 20.0;
|
||||
double t = (dB - LUT_A) / (LUT_B - LUT_A);
|
||||
t = std::min(std::max(t, 0.0), 1.0);
|
||||
lvl = std::pow(t, static_cast<double>(LUT_GAMMA)) * LUT_MULT;
|
||||
if (!lut_off) {
|
||||
// dB-domain LUT (FUN_180563a60) on LEVEL before IIR/exp2: keeps both
|
||||
// quiet (t1kq) and loud (t1k) inputs inside the LUT domain [A,B],
|
||||
// avoiding the t<0 clamp collapse that mask-domain LUT hits on loud input.
|
||||
double dB = std::log10(std::max(lvl, 1e-12)) * 20.0;
|
||||
double t = (dB - LUT_A) / (LUT_B - LUT_A);
|
||||
t = std::min(std::max(t, 0.0), 1.0);
|
||||
lvl = std::pow(t, static_cast<double>(LUT_GAMMA)) * LUT_MULT;
|
||||
}
|
||||
band_level[k] = static_cast<float>(lvl);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user