bench: official param bridge (setparam/dump_params.lua) + rpp_setparam format tool; 22c — XML params decorative, depth=+-18dB, trim=+-24dB, reduction curves measured

This commit is contained in:
2026-08-22 18:28:54 +03:00
parent 7fac8b2a4f
commit f5ef81667c
4 changed files with 176 additions and 0 deletions
+46
View File
@@ -1435,3 +1435,49 @@ FUN_180529fe0 (Soothe2Module<float>::vtbl) НЕ ссылается на {+0x168,
канон не меняем (корпус держит), но источник правды теперь внутри аудио-модуля.
3. Новый приоритет №1: полный разбор аудио-тела FUN_180529fe0 (215 строк декомпа,
/tmp/consumers_out.txt) + combine-consumer hunt — насыщение C_max≈0.70 сидит там.
## ============ UPDATE 2026-08-22c: PARAM BRIDGE + RENDER-BENCH CALIBRATION ============
Инфраструктура управления плагином через ОФИЦИАЛЬНЫЙ параметр-мост REAPER:
- `dump_params.lua` — дамп всех FX-параметров (имя, raw 0..1, formatted UI) в /tmp/opencode/fxparams.txt.
- `setparam.lua` — установка по имени через TrackFX_SetParam + SaveProjectEx (env S2_SET="name=val;...", S2_OUT).
- `scripts/rpp_setparam.py` — редактор XML-стейта в RPP с корректным апдейтом length-полей
(A=buflen16, B=len(xml), хвост JUCEPrivateData сохраняется).
### КЛЮЧЕВОЕ ОТКРЫТИЕ: XML `<PARAM>` секция НЕ источник VST3-стейта
Живой дамп: depth raw=0.524 ↔ fmt=0.9; в XML при этом "0.8639736175537109" (=UI-единицы!).
Плагин восстанавливает параметры из БИНАРНОЙ части чанка; XML-список — декоративная
копия для GUI-восстановления. Правки только XML → рассинхрон → плагин откатывается в
дефолт (объясняет «магию» идентичных рендеров −31.76 у любых depth-правок; контроль
same-value rewrite давал байт-в-байт реф ✓). ВНИМАНИЕ к rpp_setparam.py: менять можно,
но аудио это НЕ меняет.
### Семантика параметров (через мост)
- `depth`: raw 0..1 → UI **±18 линейно** (ui=36·raw−18). Рендеры подтверждают монотонность:
raw=0 → юнити; raw=1.0 (+18) → 37.6 dB @tone.
- `input trim`: raw → **±24 dB**.
- band sens: fmt в dB; stereo mode mid|side; balance 100%|57%.
### WAV-грабли (живое подтверждение класса багов 71644ff)
REAPER пишет bext(602B)+junk(28B) ПЕРЕД data; наивный парсер (readframes+reshape без
каноничного loader) даёт фантомный широкополосный шум и фальшивый клиппинг
(corr(L,R)≈0 артефакты). Каноничный render_parity.load корректен; санити bypass:
corr(L,R)=1.0000, rms=out=in — РЕНДЕР-ПАЙПЛАЙН ЧИСТЫЙ.
### Измеренные кривые редукции (t1kq-пресет, тон@1000, Goertzel 0.75s)
- Depth-свип: монотонный, raw .5→−5.5 dB; .75→−21 dB; 1.0→−37.6 dB @tone.
- Input-trim свип (холодный тон −18 dBFS): R_eff растёт 1.4→15.7 dB на всём ±24 —
ПОТОЛКА НЕТ в этом диапазоне (против гипотезы C_max≈0.70 как свойства плагина).
- Горячий тон (+6 dBFS): out@1000 ЗАМИРАЕТ на −26.74 dB при trim ≥+12 (R_eff cap ≈20.7),
плато воспроизведено дважды.
- НО: при одинаковом относительном драйве холодный/горячий дают РАЗНЫЙ gain
(15.7 vs 20.7 @L≈+6) ⇒ отклик детектора не чистая f(level) — контент/нормализация
(согласуется с KEY NEGATIVE RESULT Phase B).
### Следствия для приоритета №1
1. «Насыщение C_max≈0.70» старой модели — артефакт placeholder MULT=4.2/Pchip cap 0.667,
а не свойство плагина в рабочем диапазоне.
2. Реальный потолок проявляется как FLOOR выходного уровня (−26.74 dB @hot) — искать
механизм floor/clamp в level-path декомпе с конкретной целью.
3. Инструмент готов для систематического картирования R(L, sens, depth): скрипты +
мост позволяют прогонять десятки конфигов без ручного GUI.