Трек 14: аудио — перенос аудио-подсистемы v1 на воксельный движок
...
Движок (@rpg/engine): src/audio/ — types (4 шины master/music/sfx/ambience,
хендлы, опции), decode (BufferCache с in-flight дедупом декода), Voices
(полифония sfx: вор самого тихого, restart по ключу, панорама в полёте),
Loops (слоты музыки/амбиента с кроссфейдом), SoundSpec/Music (спек-синтез,
детерминированный), synth (примитивы v1 tools/synth.mjs в TS — в v2 нет
WAV-пайплайна, всё синтезируется в рантайме), AudioManager (фасад:
prepare() заводит контекст синхронно, unlock, playSpec с кэшем буфера,
шпион onPlayed). 44 юнит-теста (261 всего), тесты v1 перенесены 1:1.
Демка: src/audio.ts (спеки боя/урона/шагов — формулы v1 sfxSpecs;
DemoAudio — позиционный звук: затухание (1-d/r)^1.5 + изо-панорама,
дедуп 0.08 с; StepVariants — 3 варианта шага), обвязка в main.ts —
хуки боя (cone→bell_hit, resonance→bell_low, spit, awake→ash_hiss,
kill→ash_die, playerHit→hurt), шаг на границе половины walk-цикла,
unlock на первом жесте; мост audioUnlock/audioInfo (кольцевой буфер 24).
Гейт audio.mjs (8 проверок, DEV-шпион): тишина на старте, шаги играют,
атака→bell_hit, плевок→spit, резонанс→bell_low, лог ограничен 24.
Все 11 гейтов демки зелёные. Урок: кулдаун конуса не сбрасывается
телепортом — между боевыми секциями гейта ждать >= 30 тиков.
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
2 days ago