Движок: playBuffer/createBuffer (sfx из памяти); игра — вариативные шаги
D2 работы D. AudioManager: общий запуск голоса вынесен в startSfx,
playBuffer(key, buffer, opts) играет буфер из памяти в шину sfx,
createBuffer(Float32Array, rate=22050) строит AudioBuffer (null до unlock).

Чистые примитивы синтеза вынесены в @rpg/engine/tools/synth.mjs (без
node-импортов — wav.mjs тянет node:fs и в браузере не соберётся); wav.mjs
реэкспортирует их для тулз, WAV-файлы побайтно не изменились.

Игра: systems/StepVariants.ts — 3 процедурных варианта шага на поверхность
(сиды 253–256, полосы как в gen.mjs), AudioSystem.playStep(surface) вместо
ключа+джиттера rate, LocationScene отдаёт поверхность. До unlock — файловый
шаг. Гвард: @rpg/engine/tools/* — публичное API. Доки и план обновлены.

Co-Authored-By: Claude Code <noreply@anthropic.com>
1 parent 4ded668 commit f3282ab97c4db9cf70eeeb5e8e8f2862778c5834
@root root authored 11 hours ago
Showing 14 changed files
View
apps/game/src/scenes/LocationScene.ts
View
apps/game/src/systems/AudioSystem.ts
View
apps/game/src/systems/StepVariants.ts 0 → 100644
View
apps/game/src/systems/__tests__/AudioSystem.test.ts
View
apps/game/src/wav-tools.d.ts 0 → 100644
View
docs/engine/assets-audio-save.md
View
docs/engine/practices.md
View
docs/plan.md
View
packages/engine/src/audio/AudioManager.ts
View
packages/engine/src/audio/__tests__/AudioManager.test.ts
View
packages/engine/tools/__tests__/boundary.test.mjs
View
packages/engine/tools/boundary.mjs
View
packages/engine/tools/synth.mjs 0 → 100644
View
packages/engine/tools/wav.mjs