4.8 KiB
PROMPT FOR NEXT SESSION (2026-08-25, после 24kk2)
Продолжаем bit-exact реверс soothe2 в /home/m/re-tools (ветка main). ГЕЙТ СМЕНЫ КАНОНА = BIT EXACT (решение пользователя): все параметры прослежены до декомпа + корпус в шумовом пол. До тех пор канон не трогаем.
ПРОЧИТАТЬ ПЕРВЫМ: AGENTS.md (фаза-заголовок 24kk2 + env-флаги + инструменты) → handoff/NOTES_LEVEL.md обновления 24j–24kk2 → BLOCKMAP_529fe0.md (дополнения 23b/24l/24hh/24ii).
СОСТОЯНИЕ
ПРИМЕНЕНИЕ ДЕКОДИРОВАНО ДО ФОРМУЛ:
mask(b) = 10^(−cut_D(b)/20) вещественная, per-bin multiply кадра
cut_D(b) = α·ln1p(lvl_raw(b)/β)+c [+Δ вторые пики]
lvl_raw = am/res·scale наш фронтенд, float-parity ✓
слой = STFT БЕЗ синтез-окна RT_SYN=1
Калибровки (rms ≤0.016 дБ):
dual fc500 q0.5 s12 ДВА тона : α=3.2193 β=0.4927 c=+0.54
fc1000 q0.5 s12 ОДИН тон : α=1.6151 β=0.3645 c=+0.48
fc500 q0.5 s12 ОДИН тон : α=1.1530 β=0.4038 c=+0.33
Корпус: dual 0.193 max 0.438 с флагами RT_VLAW=1 RT_SYN=1 RT_NOWARP=1 RT_NOIIR3=1 RT_IIR12=0. Канон TOTAL 2.286 нетронут.
ОТЗЫВАНО И НЕ ВОЗВРАЩАТЬСЯ: ×1.805-свёртка [23e], OLA-нормировка [24i], двухстадийный γ₀ как множитель закона [24m — это артефакт двух тонов], клампы параметров [24dd], B∝am [24bb], axpy-семантика th2000 [24ii — это array-multiply], «acc_i += bands[i]» шага 12 [24gg — это COPY].
ЗАДАЧА №1: каскадный симулятор шагов 9–19 (оп-за-опом)
Dataflow декодирован (BLOCKMAP 24hh/24ii):
vec698 *= (xmm12−[54087c]) ; обнуление при дефолтах
vec6f8 += 0.8 ; базовая линия
bigkernel(vec6f8, bands_i, vec6f8)
vec6f8 = bands_curve − ACC_i ; COMBINE (dc40: out=rdx−r10)
f6f8_верх += ATT[k]·ACC[k]; низ += REL[k]·ACC[k] ; тройки re/im/coef
COPY(...) ; шаг 12 = memcpy!
bands += (−1.0); bigkernel in-place ; центрирование+нелинейность
bands *= track_i; bands *= kWarp ; th2000 = array-multiply
IIR4 ×2; финальные scale/op
→ bands[i] → design log → scratch → FIR → audio multiply exp(scratch)
Тела bigkernel'ов по рантайм-адресам: 1803a06a0/180296c80/180323f20/1802dc0e0 (x87 exp-семейство). Коэффициенты IIR-генератора 533340 исправлены (насыщающая форма arg=|c|·g/n; p=[54087c]=1, mult=360, C=1000).
Метод проверки: собрать симулятор в Python (numpy), прогнать lvl_raw из tract_* через каскад, сравнить с deepest-scratch кривыми sc_* — rms < 0.05 дБ = замкнулось. Затем перенос в C++.
ЗАДАЧА №2: параметризация α(контент)/fc
α удваивается с числом тонов (частотное смешение шаблонно-локальное — далёкий тон не влияет, 24ll). Инструмент: scripts/campaign.py (ячейка ≈8 мин). Двухтональная дистанционная серия уже снята (sc_d*, инверсия не сошлась — нужен каскад из Задачи №1 сначала!).
СРЕДА (грабли, всё проверено болью)
- rendersnap2.py: RENDER_FILE брать ИЗ rpp (клоны наследуют путь — однажды перезаписали реф); каталоги снапов задавать уникальные (argv[3]).
- touch+mtime перед каждым замером (same-second cmake hazard).
- tone1k.wav громче dual.wav в 2.28× — при сравнении серий учитывать.
- Свип НЕ годится для Y/X-отношения; только мультитон/мультиуровень.
- Динамика V(t)↔g(t) на рампе не сходится — пары только из стационара.
- HW-ловушки под wine невозможны (wine держит слоты); INT3 требует дисциплины fnwatch4 и ГАРАНТИРОВАННО свежего рендера.
- Метрика только честная: render_parity.load / Гёрцель последних 0.75 c.
- Коммитить подшагами; факты → NOTES_LEVEL (очередной номер 24ll+).