From f365fa8451c54b8a43243adb3d21c0f322229567 Mon Sep 17 00:00:00 2001 From: Matiq Date: Tue, 25 Aug 2026 12:18:32 +0300 Subject: [PATCH] =?UTF-8?q?docs:=20full=20documentation=20refresh=20post-2?= =?UTF-8?q?4kk2=20=E2=80=94=20README=20status=20(application=20decoded=20t?= =?UTF-8?q?o=20formulas,=20dual=200.193),=20AGENTS=20phase=20header=20+=20?= =?UTF-8?q?env-flags/tools=20tables,=20NEXT=5FPROMPT=20rewrite=20(cascade?= =?UTF-8?q?=20simulator=20+=20campaign=20recipes),=20PLAN/roadmap=20gate?= =?UTF-8?q?=3DBIT=20EXACT=20decision=20recorded?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AGENTS.md | 61 +++++++++++++++++----- BITEXACT_PLAN.md | 11 ++++ README.md | 77 +++++++++++++++------------ handoff/NEXT_PROMPT.md | 116 +++++++++++++++++++++++------------------ roadmap.md | 5 ++ 5 files changed, 175 insertions(+), 95 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index bfc4c92..8b979c2 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -4,18 +4,25 @@ Bit-exact реверс DSP-ядра oeksound soothe2 (VST3) → транскри Полное журналирование — в `handoff/NOTES_LEVEL.md`, `handoff/NOTES_TWIN.md`, `handoff/NOTES_CAPTURE.md`, `roadmap.md`. -> **Текущая фаза (2026-08-24, после 24t):** ПРИМЕНЕНИЕ ДЕКОДИРОВАНО ФОРМУЛАМИ: -> аудио = побиновное умножение кадра на маску `10^(−cut_D/20)`, -> `cut_D = α·ln1p(lvl_raw/β)+c` (+Δ у вторых пиков), калибровка dual-семейства -> (q=0.5,sens=12): α=3.2193 β=0.4927 c=0.54 Δ=+6.92, rms 0.016 дБ. -> lvl_raw — НАШ детектор-фронтенд (float-parity ✓). RT_VLAW v3 в коде (env-gated): -> dual end-to-end 9.47/11.16 vs реф 10.32/11.82; корпус dual 0.708 (было 3.264). -> Буфер FIR@540668 = промежуточное мин.-фазовое представление (exp(s−iH(s)), -> Гильберт по частоте) — для транскрипции не нужен. Остаток −0.85 дБ = слой -> STFT render48k (окно симметричное vs периодическое?, hop, нормировка). -> Открыто: параметризация α/β/c/Δ по q/sens/fc (датасеты sc_* готовы), -> правило вторых пиков из декомпа, ops A–D (опционально). Журнал: NOTES_LEVEL -> 24j–24t; карта: handoff/BLOCKMAP_529fe0.md. ЭТОТ ФАЙЛ ЧИТАЙ ПЕРВЫМ. +> **Текущая фаза (2026-08-25, после 24kk2):** ПРИМЕНЕНИЕ ДЕКОДИРОВАНО ФОРМУЛАМИ: +> аудио = побиновное умножение кадра на вещественную маску `10^(−cut_D/20)`, +> `cut_D = α·ln1p(lvl_raw/β)+c` (+Δ у вторых пиков). Калибровки (rms ≤0.016 дБ): +> dual(q0.5,s12,2 тона)=3.2193/0.4927/+0.54; fc1000(1 тон,q0.5)=1.6151/0.3645/+0.48; +> fc500(1 тон)=1.1530/0.4038/+0.33. lvl_raw — НАШ фронтенд (float-parity ✓). +> Слой STFT = БЕЗ синтез-окна (`RT_SYN=1`). **dual-корпус 0.193 max 0.438** +> (канон 3.264); канон TOTAL 2.286 нетронут. ГЕЙТ СМЕНЫ КАНОНА = BIT EXACT +> (решение пользователя: все параметры прослежены до декомпа + шумовой пол корпуса). +> +> Ключевые факты: q НЕ влияет на закон (доказано 24kk); sens линейно через +> lvl_raw; далёкий контент не влияет — смешение шаблонно-локальное (24ll); +> аудио = exp(deepest-scratch)+const; буфер FIR@540668 = мин.-фазовое +> представление (exp(s−iH(s))) — не для транскрипции. Тела bigkernel'ов: +> 1803a06a0/180296c80/180323f20/1802dc0e0 (x87 exp-семейство, 24jj). +> +> ОСТАТОК: каскадный симулятор шагов 9–19 по dataflow (24hh/24ii) → +> параметризация α(контент)/fc через campaign.py (датасеты готовы) → +> Δ-правило из pre-combine → полный корпус. Журнал: NOTES_LEVEL 24j–24kk2; +> карта метода: handoff/BLOCKMAP_529fe0.md. ЭТОТ ФАЙЛ ЧИТАЙ ПЕРВЫМ. ## Золотое правило (обязательно) 1. **Цель — bit-exact реверс кода**, НЕ эмпирическая подгонка кривых. Каждый параметр @@ -141,6 +148,36 @@ scale → LUT level-domain (t^γ·MULT, γ=0.344 decomp / MULT=4.2 placeholder) - `scripts/resalpha.py` — сбор трактов + теорема об отсутствии α (22x). - `scripts/dualtrace.py` + `play_loop.lua` — живой захват ctx при realtime-playback (22y). +## Env-флаги экспериментов (24j–24kk2) + +| флаг | действие | +|------|----------| +| `RT_VLAW=1` | закон применённой стадии: mask=10^(−(α·ln1p(lvl/β)+c)/20) | +| `RT_SYN=1` | STFT БЕЗ синтез-окна (найденный слой плагина) | +| `RT_WIN=0/1/2` | окно анализа: sym-hann / periodic / rect | +| `RT_NOWARP=1` | отключить warp-модуляцию маски | +| `RT_NOIIR3=1` | отключить IIR3 ×2 | +| `RT_IIR12=0` | отключить частотные IIR1/2 (КРИТИЧНО с RT_VLAW — иначе размывают дипы) | +| `RT_DUMP_BIN=` (+`RT_DUMP_FRAME=N`) | дамп тракта бина N: am/res/lvl_raw/band_level/prewarp/w | +| `RT_VDBG=1` | stderr-печать vlaw-вычислений | + +Полный набор dual-решения: `RT_VLAW=1 RT_SYN=1 RT_NOWARP=1 RT_NOIIR3=1 RT_IIR12=0`. + +## Инструменты сессии 24j–24kk2 + +| скрипт | назначение | +|--------|-----------| +| `scripts/rendersnap2.py [cap] [outdir]` | мягкий STOP-снаппер: слоты FIR/scratch/bands/R + скалярный банк + t_snap; НЕ убивает reaper; RENDER_FILE из rpp (не удалять чужие рефы!) | +| `scripts/campaign.py ` | ячейка параметризации: клоны rpp+рефы (~8 мин) | +| `scripts/disasm_func.py [len]` | capstone-дизасм с инлайн-резолвом RIP-констант | +| `scripts/iat_name.py` | рантайм-резолв импортов bigkernel'ов через PE-экспорты (SIGSTOP!) | +| `scripts/probe_states.py` / `probe_mem.py` / `dump_dispatch.py` | живые state-заголовки / память / таблицы диспатча | +| `scripts/hunt2.py` | перебор всех ctx-инстансов | +| `scripts/scan_pairs.py`, `scan_lutsub.py` | диагностика памяти по сигнатурам float-пар | + +Датасеты кампании: `/tmp/opencode/sc_{q,sens,qmap,k,f,d}*` + `tract_*` + +`{level_pairs,f_series,q_series,k_series}.pkl/.npz` (см. NOTES 24bb–24kk2). + ## Чистая работа - Не коммитить: `*.bin`(дампы 112М), `*.wav/rpp`, `*.log`, `dsp/build/`, `ghidra-proj/`, `dl/lib/bin/include/`, `regions*/`. См. `.gitignore`. diff --git a/BITEXACT_PLAN.md b/BITEXACT_PLAN.md index 6c0dacf..d9adb79 100644 --- a/BITEXACT_PLAN.md +++ b/BITEXACT_PLAN.md @@ -26,6 +26,17 @@ comb 10 dB). Bit-exact ДОСТИЖИМ (F0 gate: плагин байт-дете > Новый приоритет №1 — семантика входов `bands[]` (см. AGENTS.md и NOTES_LEVEL > 22s–22z); карта метода — handoff/BLOCKMAP_529fe0.md. +> **ОБНОВЛЕНИЕ 2026-08-25 (сессии 24j–24kk2):** ПРИМЕНЕНИЕ ДЕКОДИРОВАНО ДО ФОРМУЛ. +> Применённый фильтр = побиновное умножение кадра на вещественную маску +> `10^(−(α·ln1p(lvl/β)+c)/20)`; α/β/c — константы контент-семейства (таблица +> калибровок в NOTES 24ee); слой STFT без синтез-окна. dual-корпус 0.193 +> (флаги RT_VLAW/SYN/NOWARP/NOIIR3/IIR12). Гейт смены канона = BIT EXACT +> (решение пользователя 24hh2). Остаток до полного покрытия: (1) каскадный +> симулятор шагов 9–19 по dataflow BLOCKMAP 24hh/24ii + тела bigkernel +> 1803a06a0 и со. (24jj); (2) k-маппинг фронтенда (twin/am формулы); +> (3) Δ-правило вторых пиков. Отвергнуто: ×1.805-свёртка, клампы параметров, +> GUI-LUT в аудио-пути, B∝am, скалярные комбинации lvl/res. + Цель фазы C (bit-exact): воспроизвести `FramedDetector` (= fn `FUN_180529fe0` mono-path) настолько точно, что `verify_bit_exact.py` даёт побайтовое совпадение на рендерах (`t1kq_*`, `dual_*`, `comb_*`). Ниже — конкретный порядок, что и зачем. diff --git a/README.md b/README.md index 8fc163c..8caf608 100644 --- a/README.md +++ b/README.md @@ -10,54 +10,65 @@ --- -## Статус (P5, 2026-08-22) +## Статус (24kk2, 2026-08-25) -**Цель — bit-exact реверс.** Декомпиляция DSP-ядра закрыта (~95%): twin-резонатор, -генератор case8, level-path, mask-apply (FUN_180529fe0), FFT-conv — расшифрованы; -дизассемблы в `handoff/nls_dasm/` (~140). +**Цель — bit-exact реверс** (гейт смены канона зафиксирован пользователем: только +после прослеживания всех параметров до декомпа и схождения корпуса в шумовой пол). +Декомпиляция DSP-ядра закрыта (~95%); дизассемблы в `handoff/nls_dasm/` (~140). -**Активный канон — C++ `FramedDetector`** (`dsp/framed_model.cpp`): структурная цепь +**Применение декодировано до формул** (сессия 24j…24kk2): ``` -level=am*res*scale -> IIR1/IIR2 leaky -> mask=exp2(-level)*blend -> combine/acc --> warp(mask*=0x540768, *=warp) -> IIR3x2 -> dry/wet -> FFT-conv +mask(b) = 10^(−cut_D(b)/20) ← вещественная, per-bin multiply кадра +cut_D(b) = α·ln(1+lvl_raw(b)/β)+c [+Δ у вторых пиков] +lvl_raw = am/res·scale (наш детектор-фронтенд, float-parity ✓) +слой = STFT БЕЗ синтез-окна (RT_SYN=1) ``` -- **Level-tracker = би-направленный leaky-IIR** `y=A[i]·acc+B[i]·x` (B=1−A), live-таблицы - в `dsp/rt_mask_tables.{hpp,cpp}`, `dsp/rt_weights.{hpp,cpp}`. -- **Корпус (62 случая)**: bridge mean 1.594 dB; структурная цепь TOTAL 2.286, - но comb **6.12** и res **0.44** — лучше bridge. +Калибровки формы (три независимых семейства, rms ≤0.016 дБ): α/β/c зависят от +контента (α удваивается с числом тонов — частотное смешение шаблонно-локальное), +q НЕ влияет на закон, sens входит линейно через lvl_raw. -### Главное за 2026-08-21…22 (сессии 21a–22i) +- **dual-семейство решено**: корпус 22 случая **mean 0.193 / max 0.438 dB** + (канон 3.264). Флаги: `RT_VLAW=1 RT_SYN=1 RT_NOWARP=1 RT_NOIIR3=1 RT_IIR12=0`. +- **Канон не тронут**: TOTAL 2.286 (env-gated эксперименты живут рядом). +- **Буфер FIR@540668** = промежуточное мин.-фазовое представление + (`exp(s−i·H(s))`, Гильберт по частоте) — аудио слышит `exp(scratch)` напрямую. +- **Тела bigkernel'ов найдены** (рантайм-резолв IAT): 1803a06a0 / 180296c80 / + 180323f20 / 1802dc0e0 — x87-трансценденты (exp-семейство). -1. **«LUT-кривая» FUN_180563440/563a60 — GUI-only!** Весь кластер кривых питается от - GUI-timer vtables; аудио-метод FUN_180529fe0 BandConfig не читает (22b). Live BandConfig - у всех конфигов одинаковый: A=−24/B=28/γ=1. LUT-константы в модели помечены EMPIRICAL. -2. **Пол редукции найден живьём и решён алгебраически** (22d/e): hot-тон упирается в жёсткий - пол gain=−20.72 dB = `20·log10(blend·ln10/20)` с точностью 0.0055 dB; - `floor_dB(sens) ≈ −18.78 − (sens−6)/3` (якорь sens6 = ln10/20 ровно). -3. **Разрыв локализован в детекторном фронте** (22g/i): модель теряет ×2.8 уровня на - изолированных пиках (lvl_raw 3.01 → 1.06 после IIR1-разведения), реальный плагин - доводит пост-IIR lvl до ~3.12. Не форма кривой — амплитудная цепочка am/res/scale. -4. **Инфраструктура**: официальный параметр-мост REAPER (`setparam.lua`/`dump_params.lua`), - XML `` в RPP = декоративная копия; live-capture BandConfig (`scripts/step7_capture.py`); - env-солверы констант (`RT_LUT_A/B/G/MULT`, `RT_LUT_OFF`, `RT_LVL_CAP`). -5. Оффлайн-гипотезы Phase B (pooling/temporal/scalar-ρ) — все опровергнуты (22a); - clipping-теория пола опровергнута (float-домен, 22g); mix = чистый dry/wet кроссфейд. +### Главное за 2026-08-24…25 (сессии 24j–24kk2) + +1. **Применение = побиновный complex-multiply кадра** на маску; «магический ×1.805» + оказался произведением экспонент стадий построения буфера (0.984×1.8345). +2. **Закон уровня универсальной формы** `α·ln(1+L/β)+c` — подтверждён тремя + независимыми калибровками; константы зависят от контента (число тонов) и слабо от fc. +3. **Слой STFT**: плагин НЕ домножает выход обратного FFT на окно + (`RT_SYN=1`); WIN_WINDOW движка — фейд 0.5→0.8 ровно за 2049 сэмплов (=бинам кернела). +4. **GUI/аудио разделение**: LUT-строитель FUN_180563a60 — GUI-ветка; аудио-компрессия + живёт в семантиках шагов 9–19 BLOCKMAP. +5. **Dataflow шагов 9–16 декодирован**: vec6f8=bands−ACC; fma тройками + (re,im,coef) с ATT/REL; th2000=поэлементное умножение массивов (не axpy!); + шаг 12=COPY (исправлен старый BLOCKMAP). +6. **Инструменты**: rendersnap2 v7 (мягкий STOP-снаппер со слотами+скалярами, + RENDER_FILE-фикс), patchparam.py (правка VST-чанка RPP!), campaign.py + (ячейка параметризации), disasm_func.py (capstone с RIP-константами), + iat_name.py (рантайм-резолв импортов через PE-экспорты). ```bash -# Канон сборки и рендера: +# Сборка и канонные команды: cmake -S dsp -B dsp/build && cmake --build dsp/build --target framed_test render48k ./dsp/build/render48k /home/m/soothe-bt/tone1kq.wav /tmp/o48.wav 1000,0.99999785,12 python3 scripts/corpus_structural.py --vs-bridge scripts/baseline_bridge.json ``` Детальная метрика и история — в `AGENTS.md`, `BITEXACT_PLAN.md`, `handoff/NOTES_LEVEL.md` -(апдейты 20j…22i). +(апдейты 20j…24kk2). ### Открытые bit-exact пробелы -**Приоритет №1 — детекторный фронт**: амплитудная нормировка am, форма res_k, сила -IIR1/2 вдоль частоты (модель теряет уровень на пиках). Далее: PRNG-пролог (LCG→fVar30), -FFT-conv сглаживание, бит-экзактный exp2, combine/acc консюмер, SR-mismatch -(внутренний DSP 48000/N=4096 против хоста). Полный список — `AGENTS.md`, `BITEXACT_PLAN.md` -(Шаг 9), `NOTES_LEVEL.md`. +**Приоритет №1 — каскадный симулятор шагов 9–19**: dataflow декодирован +(24hh/24ii: vec6f8=bands−ACC, fma-тройки att/rel, ×track, ×warp, центрирование −1), +тела bigkernel'ов найдены по рантайм-адресам — осталось сложить оп-за-опом и +проверить на датасетах sc_* (rms каскада сейчас ~0.42 на угаданных формах). +Далее: k-маппинг фронтенда (twin/am формулы), Δ-правило вторых пиков из pre-combine. +Полный список — `AGENTS.md`, `BITEXACT_PLAN.md`, `NOTES_LEVEL.md` (24bb→24kk2). > Исторический блок (поведенческая/численная модель B.1…B.15, `framed_render.py`, > Pchip LUT, res_power) — см. `roadmap.md`; самодостаточен как справочник, но не канон. diff --git a/handoff/NEXT_PROMPT.md b/handoff/NEXT_PROMPT.md index ea53d61..5a2892f 100644 --- a/handoff/NEXT_PROMPT.md +++ b/handoff/NEXT_PROMPT.md @@ -1,58 +1,74 @@ -# PROMPT FOR NEXT SESSION (2026-08-24, после 24d) +# PROMPT FOR NEXT SESSION (2026-08-25, после 24kk2) -Продолжаем bit-exact реверс soothe2 в /home/m/re-tools (ветка main, HEAD 135f0e9). +Продолжаем bit-exact реверс soothe2 в /home/m/re-tools (ветка main). +ГЕЙТ СМЕНЫ КАНОНА = BIT EXACT (решение пользователя): все параметры +прослежены до декомпа + корпус в шумовом пол. До тех пор канон не трогаем. -ПРОЧИТАТЬ ПЕРВЫМ: AGENTS.md → handoff/NOTES_LEVEL.md обновления 23d–24d -(прорыв и смена парадигмы) → BLOCKMAP_529fe0.md + приложение 23b. -Не опираться на roadmap-разделы про Шаги 7/9 и на вывод 23k «build-once» — -он ОТЗЫВАН в 24c. +ПРОЧИТАТЬ ПЕРВЫМ: AGENTS.md (фаза-заголовок 24kk2 + env-флаги + инструменты) +→ handoff/NOTES_LEVEL.md обновления 24j–24kk2 → BLOCKMAP_529fe0.md +(дополнения 23b/24l/24hh/24ii). -СОСТОЯНИЕ КАНОНА: не тронут — голая цепь 48k/4096 + RT_LAWAFFINE=7.4,1.85, -TOTAL 1.931 (bridge-гейт 1.594 не пройден). -Отвергнуто и НЕ возвращаться: скалярные законы A/S, двухфакторные quad/resrp, -точечные lvl=f(am,res^α) [22x теорема], спрединг IDFT→окно→DFT как -постобработка [22z], плоский IIR [22u], симметричная log-свёртка [23c]. +## СОСТОЯНИЕ -ГЛАВНЫЙ ПРОРЫВ СЕРИИ (23d–23e, живые снапы rendersnap.py): - bands[] = сырой спектр кадра → log(DESIGN 0x1802a24c0) → ops → scratch@540628 - → FIR@540668 = exp(0.984·scratch) поточечно; окно = падающая половина - периодического Hann(4096) на [n/2..n); применение = свёртка ×1.805 (EMPIRICAL, - константа по всем 4 точкам ±0.5%). Центр не зависит от q живьём; - Δскайрт сходится в 3%. q-серия снята (NOTES 23f). +ПРИМЕНЕНИЕ ДЕКОДИРОВАНО ДО ФОРМУЛ: +``` +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 — потребитель кернела и источник ×1.805: - Conv-движок опознан: объект ctx+0x540530 (inline-cfg {2,4096},{16384,8192}, - {2,257}; векторы +0xb8..+0x130; методы dc30 cfg / fe00 resize / dd30 dtor — - прямые вызовы из init 52e9b0). Его PROCESS-метод не найден: все 390 disp32- - ссылок на таблицу слотов учтены, скрытых нет (23h). - Пути: (а) отладить scan2.py (лежит в /tmp/opencode, НЕ закоммичен; баг: - тот же алгоритм что rendersnap.py даёт пусто — сравнить пошагово); - (б) декод аудио-клея 52exx–52fxx + поиск caller'ов vtbl+6 у соседнего - экземпляра (гипотеза GUI/DSP-пары, 24c); - (в) INT3-ловушка на тела дизайна в param-окно (~1.40–1.45 c жизни хоста) - при ГАРАНТИРОВАННО свежем рендере (render_fresh в логе обязателен!). +ОТЗЫВАНО И НЕ ВОЗВРАЩАТЬСЯ: ×1.805-свёртка [23e], OLA-нормировка [24i], +двухстадийный γ₀ как множитель закона [24m — это артефакт двух тонов], +клампы параметров [24dd], B∝am [24bb], axpy-семантика th2000 [24ii — это +array-multiply], «acc_i += bands[i]» шага 12 [24gg — это COPY]. -ИНСТРУМЕНТЫ: scripts/rendersnap.py (рабочий канал наблюдения — STOP-семпл -офлайн-рендера), qseries.py, amseries.py (нужен фикс стабильности фаз), -ilt_resolve.py, fnexec.py (early-arm HW exec-bp), perfbp.py (только native), -fnwatch4.py (дисциплина армирования: INTERRUPT→wait→arm→CONT каждому треду). -Сборка: touch dsp/framed_model.cpp && cmake --build dsp/build --target render48k -framed_test (TOOLING HAZARD — touch обязателен). Метрика только честная: -render_parity.load (24-bit!), Гёрцель по последним 0.75 c. +## ЗАДАЧА №1: каскадный симулятор шагов 9–19 (оп-за-опом) -СРЕДА (грабли, всё проверено болью): - - HW-ловушки внутри wine НЕВОЗМОЖНЫ: wine держит BP-слоты (perf ENOSPC), - ptrace-DR пишется в task_struct но не программируется в кремний [24a]; - - yabridge: сотни мёртвых сокет-директорий /run/user/1000/yabridge-* ломают - спавн хоста — rm -rf перед серией; pkill -f самоубийственно для шелла; - - kill reaper во время рендера оставляет ЧАСТИЧНЫЙ wav с полной шапкой - (источник «флака»); realtime-playback мёртв (нет аудио-девайса); - - выход рендера длиннее входа из-за LOOP=1 (выравнивание сегментов обязательно). +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). -КОНТРОЛЬНЫЕ ЧИСЛА dual_b1q_0.5: cut@500=10.32 дБ (константен ∀q), -cut@2000=11.82; Δcut скайрта ≈ линейно по −ln res (b≈2.25 дБ/e-fold). -Цель раунда: опознать потребителя кернела → декодировать ×1.805 → начать -RT_FIRCONV=1 (обработка покадровая — 24c; кернел перестраивается каждый кадр, -ловушки на цепь молчат из-за wine-слотов, см. 24a). Корпус с гейтом ---vs-bridge после любого изменения C++. Коммитить по подшагам; факты в -NOTES_LEVEL (следующий номер UPDATE 24e+). +Метод проверки: собрать симулятор в 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+). diff --git a/roadmap.md b/roadmap.md index 929730e..073cf00 100644 --- a/roadmap.md +++ b/roadmap.md @@ -27,6 +27,11 @@ > одновременно (res-тенция) → канон не меняем; следующий рычаг — контент-зависимость > (att/rel на флюктуациях, combine-консюмер). Инструментарий RT_DUMP_BIN/RT_DUMP_ALL. +> **2026-08-25 (24j–24kk2): ПРИМЕНЕНИЕ ДЕКОДИРОВАНО ДО ФОРМУЛ.** +> mask=10^(−cut_D/20); cut_D=α·ln1p(lvl/β)+c (пер-контент константы, rms≤0.016); +> слой STFT без синтез-окна; dual-корпус 0.193 (канон 3.264). ГЕЙТ = BIT EXACT. +> Детали: NOTES_LEVEL 24j–24kk2, BLOCKMAP_529fe0 23b–24jj, NEXT_PROMPT.md. + - **Статический декомп DSP-ядра — закрыт (~95%)**: twin-резонатор, генератор case8, level-path (0x529fe0/0x563440/0x563a60), mask-apply (FUN_180529fe0 mono-path), IIR-трекеры, FFT-conv (0x535a70), main render-loop (FUN_18052e260) декодированы; `.dis` в `handoff/nls_dasm/`.