docs: full documentation refresh post-24kk2 — README status (application decoded to formulas, dual 0.193), AGENTS phase header + env-flags/tools tables, NEXT_PROMPT rewrite (cascade simulator + campaign recipes), PLAN/roadmap gate=BIT EXACT decision recorded

This commit is contained in:
2026-08-25 12:18:32 +03:00
parent 0fee9238dc
commit f365fa8451
5 changed files with 175 additions and 95 deletions
+49 -12
View File
@@ -4,18 +4,25 @@ Bit-exact реверс DSP-ядра oeksound soothe2 (VST3) → транскри
Полное журналирование — в `handoff/NOTES_LEVEL.md`, `handoff/NOTES_TWIN.md`, Полное журналирование — в `handoff/NOTES_LEVEL.md`, `handoff/NOTES_TWIN.md`,
`handoff/NOTES_CAPTURE.md`, `roadmap.md`. `handoff/NOTES_CAPTURE.md`, `roadmap.md`.
> **Текущая фаза (2026-08-24, после 24t):** ПРИМЕНЕНИЕ ДЕКОДИРОВАНО ФОРМУЛАМИ: > **Текущая фаза (2026-08-25, после 24kk2):** ПРИМЕНЕНИЕ ДЕКОДИРОВАНО ФОРМУЛАМИ:
> аудио = побиновное умножение кадра на маску `10^(cut_D/20)`, > аудио = побиновное умножение кадра на вещественную маску `10^(cut_D/20)`,
> `cut_D = α·ln1p(lvl_raw/β)+c` (+Δ у вторых пиков), калибровка dual-семейства > `cut_D = α·ln1p(lvl_raw/β)+c` (+Δ у вторых пиков). Калибровки (rms ≤0.016 дБ):
> (q=0.5,sens=12): α=3.2193 β=0.4927 c=0.54 Δ=+6.92, rms 0.016 дБ. > dual(q0.5,s12,2 тона)=3.2193/0.4927/+0.54; fc1000(1 тон,q0.5)=1.6151/0.3645/+0.48;
> lvl_raw — НАШ детектор-фронтенд (float-parity ✓). RT_VLAW v3 в коде (env-gated): > fc500(1 тон)=1.1530/0.4038/+0.33. lvl_raw — НАШ фронтенд (float-parity ✓).
> dual end-to-end 9.47/11.16 vs реф 10.32/11.82; корпус dual 0.708 (было 3.264). > Слой STFT = БЕЗ синтез-окна (`RT_SYN=1`). **dual-корпус 0.193 max 0.438**
> Буфер FIR@540668 = промежуточное мин.-фазовое представление (exp(s−iH(s)), > (канон 3.264); канон TOTAL 2.286 нетронут. ГЕЙТ СМЕНЫ КАНОНА = BIT EXACT
> Гильберт по частоте) — для транскрипции не нужен. Остаток −0.85 дБ = слой > (решение пользователя: все параметры прослежены до декомпа + шумовой пол корпуса).
> STFT render48k (окно симметричное vs периодическое?, hop, нормировка). >
> Открыто: параметризация α/β/c/Δ по q/sens/fc (датасеты sc_* готовы), > Ключевые факты: q НЕ влияет на закон (доказано 24kk); sens линейно через
> правило вторых пиков из декомпа, ops A–D (опционально). Журнал: NOTES_LEVEL > lvl_raw; далёкий контент не влияет — смешение шаблонно-локальное (24ll);
> 24j24t; карта: handoff/BLOCKMAP_529fe0.md. ЭТОТ ФАЙЛ ЧИТАЙ ПЕРВЫМ. > аудио = 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 24j24kk2;
> карта метода: handoff/BLOCKMAP_529fe0.md. ЭТОТ ФАЙЛ ЧИТАЙ ПЕРВЫМ.
## Золотое правило (обязательно) ## Золотое правило (обязательно)
1. **Цель — bit-exact реверс кода**, НЕ эмпирическая подгонка кривых. Каждый параметр 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/resalpha.py` — сбор трактов + теорема об отсутствии α (22x).
- `scripts/dualtrace.py` + `play_loop.lua` — живой захват ctx при realtime-playback (22y). - `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=<f>` (+`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 <rpp> [cap] [outdir]` | мягкий STOP-снаппер: слоты FIR/scratch/bands/R + скалярный банк + t_snap; НЕ убивает reaper; RENDER_FILE из rpp (не удалять чужие рефы!) |
| `scripts/campaign.py <base> <fc> <q> <sens> <in_prefix> <drives> <out>` | ячейка параметризации: клоны rpp+рефы (~8 мин) |
| `scripts/disasm_func.py <VA> [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 24bb24kk2).
## Чистая работа ## Чистая работа
- Не коммитить: `*.bin`(дампы 112М), `*.wav/rpp`, `*.log`, `dsp/build/`, `ghidra-proj/`, - Не коммитить: `*.bin`(дампы 112М), `*.wav/rpp`, `*.log`, `dsp/build/`, `ghidra-proj/`,
`dl/lib/bin/include/`, `regions*/`. См. `.gitignore`. `dl/lib/bin/include/`, `regions*/`. См. `.gitignore`.
+11
View File
@@ -26,6 +26,17 @@ comb 10 dB). Bit-exact ДОСТИЖИМ (F0 gate: плагин байт-дете
> Новый приоритет №1 — семантика входов `bands[]` (см. AGENTS.md и NOTES_LEVEL > Новый приоритет №1 — семантика входов `bands[]` (см. AGENTS.md и NOTES_LEVEL
> 22s–22z); карта метода — handoff/BLOCKMAP_529fe0.md. > 22s–22z); карта метода — handoff/BLOCKMAP_529fe0.md.
> **ОБНОВЛЕНИЕ 2026-08-25 (сессии 24j24kk2):** ПРИМЕНЕНИЕ ДЕКОДИРОВАНО ДО ФОРМУЛ.
> Применённый фильтр = побиновное умножение кадра на вещественную маску
> `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) Цель фазы C (bit-exact): воспроизвести `FramedDetector` (= fn `FUN_180529fe0` mono-path)
настолько точно, что `verify_bit_exact.py` даёт побайтовое совпадение на рендерах настолько точно, что `verify_bit_exact.py` даёт побайтовое совпадение на рендерах
(`t1kq_*`, `dual_*`, `comb_*`). Ниже — конкретный порядок, что и зачем. (`t1kq_*`, `dual_*`, `comb_*`). Ниже — конкретный порядок, что и зачем.
+44 -33
View File
@@ -10,54 +10,65 @@
--- ---
## Статус (P5, 2026-08-22) ## Статус (24kk2, 2026-08-25)
**Цель — bit-exact реверс.** Декомпиляция DSP-ядра закрыта (~95%): twin-резонатор, **Цель — bit-exact реверс** (гейт смены канона зафиксирован пользователем: только
генератор case8, level-path, mask-apply (FUN_180529fe0), FFT-conv — расшифрованы; после прослеживания всех параметров до декомпа и схождения корпуса в шумовой пол).
дизассемблы в `handoff/nls_dasm/` (~140). Декомпиляция 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 mask(b) = 10^(cut_D(b)/20) ← вещественная, per-bin multiply кадра
-> warp(mask*=0x540768, *=warp) -> IIR3x2 -> dry/wet -> FFT-conv 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=1A), live-таблицы Калибровки формы (три независимых семейства, rms ≤0.016 дБ): α/β/c зависят от
в `dsp/rt_mask_tables.{hpp,cpp}`, `dsp/rt_weights.{hpp,cpp}`. контента (α удваивается с числом тонов — частотное смешение шаблонно-локальное),
- **Корпус (62 случая)**: bridge mean 1.594 dB; структурная цепь TOTAL 2.286, q НЕ влияет на закон, sens входит линейно через lvl_raw.
но comb **6.12** и res **0.44** — лучше bridge.
### Главное за 2026-08-21…22 (сессии 21a22i) - **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(si·H(s))`, Гильберт по частоте) — аудио слышит `exp(scratch)` напрямую.
- **Тела bigkernel'ов найдены** (рантайм-резолв IAT): 1803a06a0 / 180296c80 /
180323f20 / 1802dc0e0 — x87-трансценденты (exp-семейство).
1. **«LUT-кривая» FUN_180563440/563a60 — GUI-only!** Весь кластер кривых питается от ### Главное за 2026-08-24…25 (сессии 24j24kk2)
GUI-timer vtables; аудио-метод FUN_180529fe0 BandConfig не читает (22b). Live BandConfig
у всех конфигов одинаковый: A=24/B=28/γ=1. LUT-константы в модели помечены EMPIRICAL. 1. **Применение = побиновный complex-multiply кадра** на маску; «магический ×1.805»
2. **Пол редукции найден живьём и решён алгебраически** (22d/e): hot-тон упирается в жёсткий оказался произведением экспонент стадий построения буфера (0.984×1.8345).
пол gain=20.72 dB = `20·log10(blend·ln10/20)` с точностью 0.0055 dB; 2. **Закон уровня универсальной формы** `α·ln(1+L/β)+c` — подтверждён тремя
`floor_dB(sens) ≈ 18.78 (sens6)/3` (якорь sens6 = ln10/20 ровно). независимыми калибровками; константы зависят от контента (число тонов) и слабо от fc.
3. **Разрыв локализован в детекторном фронте** (22g/i): модель теряет ×2.8 уровня на 3. **Слой STFT**: плагин НЕ домножает выход обратного FFT на окно
изолированных пиках (lvl_raw 3.01 → 1.06 после IIR1-разведения), реальный плагин (`RT_SYN=1`); WIN_WINDOW движка — фейд 0.5→0.8 ровно за 2049 сэмплов (=бинам кернела).
доводит пост-IIR lvl до ~3.12. Не форма кривой — амплитудная цепочка am/res/scale. 4. **GUI/аудио разделение**: LUT-строитель FUN_180563a60 — GUI-ветка; аудио-компрессия
4. **Инфраструктура**: официальный параметр-мост REAPER (`setparam.lua`/`dump_params.lua`), живёт в семантиках шагов 9–19 BLOCKMAP.
XML `<PARAM>` в RPP = декоративная копия; live-capture BandConfig (`scripts/step7_capture.py`); 5. **Dataflow шагов 9–16 декодирован**: vec6f8=bandsACC; fma тройками
env-солверы констант (`RT_LUT_A/B/G/MULT`, `RT_LUT_OFF`, `RT_LVL_CAP`). (re,im,coef) с ATT/REL; th2000=поэлементное умножение массивов (не axpy!);
5. Оффлайн-гипотезы Phase B (pooling/temporal/scalar-ρ) — все опровергнуты (22a); шаг 12=COPY (исправлен старый BLOCKMAP).
clipping-теория пола опровергнута (float-домен, 22g); mix = чистый dry/wet кроссфейд. 6. **Инструменты**: rendersnap2 v7 (мягкий STOP-снаппер со слотами+скалярами,
RENDER_FILE-фикс), patchparam.py (правка VST-чанка RPP!), campaign.py
(ячейка параметризации), disasm_func.py (capstone с RIP-константами),
iat_name.py (рантайм-резолв импортов через PE-экспорты).
```bash ```bash
# Канон сборки и рендера: # Сборка и канонные команды:
cmake -S dsp -B dsp/build && cmake --build dsp/build --target framed_test render48k 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 ./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 python3 scripts/corpus_structural.py --vs-bridge scripts/baseline_bridge.json
``` ```
Детальная метрика и история — в `AGENTS.md`, `BITEXACT_PLAN.md`, `handoff/NOTES_LEVEL.md` Детальная метрика и история — в `AGENTS.md`, `BITEXACT_PLAN.md`, `handoff/NOTES_LEVEL.md`
(апдейты 20j…22i). (апдейты 20j…24kk2).
### Открытые bit-exact пробелы ### Открытые bit-exact пробелы
**Приоритет №1 — детекторный фронт**: амплитудная нормировка am, форма res_k, сила **Приоритет №1 — каскадный симулятор шагов 9–19**: dataflow декодирован
IIR1/2 вдоль частоты (модель теряет уровень на пиках). Далее: PRNG-пролог (LCG→fVar30), (24hh/24ii: vec6f8=bandsACC, fma-тройки att/rel, ×track, ×warp, центрирование −1),
FFT-conv сглаживание, бит-экзактный exp2, combine/acc консюмер, SR-mismatch тела bigkernel'ов найдены по рантайм-адресам — осталось сложить оп-за-опом и
(внутренний DSP 48000/N=4096 против хоста). Полный список — `AGENTS.md`, `BITEXACT_PLAN.md` проверить на датасетах sc_* (rms каскада сейчас ~0.42 на угаданных формах).
(Шаг 9), `NOTES_LEVEL.md`. Далее: k-маппинг фронтенда (twin/am формулы), Δ-правило вторых пиков из pre-combine.
Полный список — `AGENTS.md`, `BITEXACT_PLAN.md`, `NOTES_LEVEL.md` (24bb→24kk2).
> Исторический блок (поведенческая/численная модель B.1…B.15, `framed_render.py`, > Исторический блок (поведенческая/численная модель B.1…B.15, `framed_render.py`,
> Pchip LUT, res_power) — см. `roadmap.md`; самодостаточен как справочник, но не канон. > Pchip LUT, res_power) — см. `roadmap.md`; самодостаточен как справочник, но не канон.
+66 -50
View File
@@ -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 ПРОЧИТАТЬ ПЕРВЫМ: AGENTS.md (фаза-заголовок 24kk2 + env-флаги + инструменты)
(прорыв и смена парадигмы) → BLOCKMAP_529fe0.md + приложение 23b. → handoff/NOTES_LEVEL.md обновления 24j24kk2 → BLOCKMAP_529fe0.md
Не опираться на roadmap-разделы про Шаги 7/9 и на вывод 23k «build-once» — (дополнения 23b/24l/24hh/24ii).
он ОТЗЫВАН в 24c.
СОСТОЯНИЕ КАНОНА: не тронут — голая цепь 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) поточечно; окно = падающая половина mask(b) = 10^(cut_D(b)/20) вещественная, per-bin multiply кадра
периодического Hann(4096) на [n/2..n); применение = свёртка ×1.805 (EMPIRICAL, cut_D(b) = α·ln1p(lvl_raw(b)/β)+c [+Δ вторые пики]
константа по всем 4 точкам ±0.5%). Центр не зависит от q живьём; lvl_raw = am/res·scale наш фронтенд, float-parity ✓
Δскайрт сходится в 3%. q-серия снята (NOTES 23f). слой = 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: ОТЗЫВАНО И НЕ ВОЗВРАЩАТЬСЯ: ×1.805-свёртка [23e], OLA-нормировка [24i],
Conv-движок опознан: объект ctx+0x540530 (inline-cfg {2,4096},{16384,8192}, двухстадийный γ₀ как множитель закона [24m — это артефакт двух тонов],
{2,257}; векторы +0xb8..+0x130; методы dc30 cfg / fe00 resize / dd30 dtor — клампы параметров [24dd], B∝am [24bb], axpy-семантика th2000 [24ii — это
прямые вызовы из init 52e9b0). Его PROCESS-метод не найден: все 390 disp32- array-multiply], «acc_i += bands[i]» шага 12 [24gg — это COPY].
ссылок на таблицу слотов учтены, скрытых нет (23h).
Пути: (а) отладить scan2.py (лежит в /tmp/opencode, НЕ закоммичен; баг:
тот же алгоритм что rendersnap.py даёт пусто — сравнить пошагово);
(б) декод аудио-клея 52exx–52fxx + поиск caller'ов vtbl+6 у соседнего
экземпляра (гипотеза GUI/DSP-пары, 24c);
(в) INT3-ловушка на тела дизайна в param-окно (~1.401.45 c жизни хоста)
при ГАРАНТИРОВАННО свежем рендере (render_fresh в логе обязателен!).
ИНСТРУМЕНТЫ: scripts/rendersnap.py (рабочий канал наблюдения — STOP-семпл ## ЗАДАЧА №1: каскадный симулятор шагов 9–19 (оп-за-опом)
офлайн-рендера), 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.
СРЕДА (грабли, всё проверено болью): Dataflow декодирован (BLOCKMAP 24hh/24ii):
- HW-ловушки внутри wine НЕВОЗМОЖНЫ: wine держит BP-слоты (perf ENOSPC), ```
ptrace-DR пишется в task_struct но не программируется в кремний [24a]; vec698 *= (xmm12[54087c]) ; обнуление при дефолтах
- yabridge: сотни мёртвых сокет-директорий /run/user/1000/yabridge-* ломают vec6f8 += 0.8 ; базовая линия
спавн хоста — rm -rf перед серией; pkill -f самоубийственно для шелла; bigkernel(vec6f8, bands_i, vec6f8)
- kill reaper во время рендера оставляет ЧАСТИЧНЫЙ wav с полной шапкой vec6f8 = bands_curve ACC_i ; COMBINE (dc40: out=rdxr10)
(источник «флака»); realtime-playback мёртв (нет аудио-девайса); f6f8_верх += ATT[k]·ACC[k]; низ += REL[k]·ACC[k] ; тройки re/im/coef
- выход рендера длиннее входа из-за LOOP=1 (выравнивание сегментов обязательно). 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), Метод проверки: собрать симулятор в Python (numpy), прогнать lvl_raw из
cut@2000=11.82; Δcut скайрта ≈ линейно по −ln res (b≈2.25 дБ/e-fold). tract_* через каскад, сравнить с deepest-scratch кривыми sc_* — rms < 0.05 дБ
Цель раунда: опознать потребителя кернела → декодировать ×1.805 → начать = замкнулось. Затем перенос в C++.
RT_FIRCONV=1 (обработка покадровая — 24c; кернел перестраивается каждый кадр,
ловушки на цепь молчат из-за wine-слотов, см. 24a). Корпус с гейтом ## ЗАДАЧА №2: параметризация α(контент)/fc
--vs-bridge после любого изменения C++. Коммитить по подшагам; факты в
NOTES_LEVEL (следующий номер UPDATE 24e+). α удваивается с числом тонов (частотное смешение шаблонно-локальное —
далёкий тон не влияет, 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+).
+5
View File
@@ -27,6 +27,11 @@
> одновременно (res-тенция) → канон не меняем; следующий рычаг — контент-зависимость > одновременно (res-тенция) → канон не меняем; следующий рычаг — контент-зависимость
> (att/rel на флюктуациях, combine-консюмер). Инструментарий RT_DUMP_BIN/RT_DUMP_ALL. > (att/rel на флюктуациях, combine-консюмер). Инструментарий RT_DUMP_BIN/RT_DUMP_ALL.
> **2026-08-25 (24j24kk2): ПРИМЕНЕНИЕ ДЕКОДИРОВАНО ДО ФОРМУЛ.**
> mask=10^(cut_D/20); cut_D=α·ln1p(lvl/β)+c (пер-контент константы, rms≤0.016);
> слой STFT без синтез-окна; dual-корпус 0.193 (канон 3.264). ГЕЙТ = BIT EXACT.
> Детали: NOTES_LEVEL 24j24kk2, BLOCKMAP_529fe0 23b24jj, NEXT_PROMPT.md.
- **Статический декомп DSP-ядра — закрыт (~95%)**: twin-резонатор, генератор case8, - **Статический декомп DSP-ядра — закрыт (~95%)**: twin-резонатор, генератор case8,
level-path (0x529fe0/0x563440/0x563a60), mask-apply (FUN_180529fe0 mono-path), IIR-трекеры, level-path (0x529fe0/0x563440/0x563a60), mask-apply (FUN_180529fe0 mono-path), IIR-трекеры,
FFT-conv (0x535a70), main render-loop (FUN_18052e260) декодированы; `.dis` в `handoff/nls_dasm/`. FFT-conv (0x535a70), main render-loop (FUN_18052e260) декодированы; `.dis` в `handoff/nls_dasm/`.