Files
soothe2-re/roadmap.md
T
Matiq f73724fee7 docs: archive 4024стр NOTES_LEVEL, единый источник TOTAL README, runbook AGENTS, 3-шаг план
- handoff/NOTES_LEVEL.md 4413→397 (голова 24mm5+), хвост → handoff/archive/NOTES_LEVEL_2026-08-18_2026-08-23.md
- handoff/NOTES_LEVEL_INDEX.md NEW навигатор, handoff/archive/ whitelist .gitignore
- SESSION_HANDOFF/summary → archive + редиректы, NOTES_TWIN/NOTES_CAPTURE сжаты
- README.md:13 единственный источник TOTAL 1.594/dual 0.193, AGENTS runbook, BITEXACT_PLAN 9→3 шага (каскад 9-19/k-маппинг/Δ)
2026-08-29 03:15:42 +03:00

4.1 KiB
Raw Blame History

Roadmap: bit-exact реверс DSP-ядра oeksound soothe2 (v1.1.2)

Цель

Воспроизвести DSP-путь soothe2 в виде собираемого standalone C++ с побайтово идентичным выходом (bit-exact).

Результат

re-tools/dsp/*.cpp/*.h (классы DSP), CMakeLists.txt, harness.cpp (WAV16 → рендер → WAV24), dsp_notes.md (карта функция↔смысл), verify_bit_exact.py.

Статус — см. README.md:13 (единственный источник TOTAL)

Итог 2026-08-28 (24mm14): применение декодировано до формул mask=10^(cut_D/20), cut_D=α·ln1p(lvl/β)+c (rms ≤0.016, 3 семейства), слой STFT без синтез-окна, dual-корпус 0.193 dB (канон 3.264). Гейт = bit-exact. Остаток: 3 шага BITEXACT_PLAN.md:1 (каскад 9–19, k-маппинг, Δ-правило). Архив B-фаз ниже свёрнут.

История B-фаз (B.1…P4.3) — свёрнуто, детали → handoff/archive/ + git log
  • Статический декомп ~95%: twin, generator case8, level-path (0x529fe0/0x563440/0x563a60), mask-apply, IIR-трекеры, FFT-conv (0x535a70), render-loop FUN_18052e260 — .dis в handoff/nls_dasm/.
  • Структурная цепь dsp/framed_model.cpp::process_band_structural (48k/4096): scale→LUT(level)→IIR1→IIR2→mirror→blend/exp2→combine→dual-warp→IIR3×2→dry/wet; live-таблицы rt_mask_tables. Корпус: comb 6.12 (bridge 10.15), res 0.44.
  • Численная модель B.10…B.15: C=g·LUT(xv)+w·warp^a, gain=(1C)·res^rp, rp=0.0275·Q^0.2159 (mean 0.175), Pchip LUT (dual 0.027). Канон — framed_render.py (исторический).
  • Фазы P1P5: twin float-parity 1.27e-5, FFT-conv, leveltrack, LUT, mask-apply — в основном готово; осталось каскад 9–19 + twin/am + Δ.

Ключевые находки (итог, свёрнуто)

  • Маска аддитивная C=g·LUT+w·warp^a (не мультипликация).
  • res_power gain=(1C)·res^rp — закрывает 500Hz residual.
  • 0x530d30 дважды NEGATIVE — тилт не оттуда.
  • LUT — гамма-монотонная FUN_180563440 (Pchip немонотонна).
  • Константы: SCALE=1/1024, DB_CONV=8.6859, IIR α=0.1, LCG 0x3cdca.

Контракт из manual (soothe2_ManualFAQ.pdf)

# Факт Следствие
M1 Soft/Hard меняет всё mode = препроцессор детектора
M2 Depth ±18, до 60 dB depthcurve-LUT, clip 60 dB
M5 Attack/Release частотно-зависимы Env — частотный масштаб
M8 Stereo link/balance/L-R vs M/S детектор на sum
M10 Банды: 2 cut + 4 general FilterGraph<float,6,0x400>

Топология пайплайна (Приложение A, стр.30)

main/sidechain → input trim → analysis (depth/sharpness/selectivity; EQ per-band)
→ stereo apply + balance → ms encode? → processing (M/S) → mix → bypass → output

Журнал вех (свёрнуто)

Веха Дата Суть
B.1B.6 08-17 C++ каркас, twin, dispatch, band-структура
B.10B.15 08-18…19 Модели C/LUT, bridge C=g·LUT+w·warp^a (0.236), res_power, dB-parity 0.268
P4.1P4.3 08-20 Декомп FUN_180529fe0, live-таблицы, dual-warp

Полный журнал — handoff/NOTES_LEVEL_INDEX.md + git log.

Где лежат детали

  • README.md:13 — актуальный статус (TOTAL).
  • handoff/NOTES_LEVEL.md (живая голова) + handoff/archive/NOTES_LEVEL_2026-08-18_2026-08-23.md — журнал.
  • handoff/BLOCKMAP_529fe0.md — карта метода 9–19.
  • handoff/NOTES_TWIN.md — twin краткая справка.
  • handoff/NOTES_CAPTURE.md — registry heartbeat.
  • notes_giant_fft.md — FFT/twiddle.