/**
* Sfx на спек-синтезе: ключ → SoundSpec (компилирует движок, WAV не нужен).
* Формулы совпадают с бывшими генераторами tools/audio/gen.mjs дословно —
* парити-тест sfxSpecs.test.ts сверяет renderSpec с функциями gen.mjs.
*/
import type { AudioManager, PlayOptions, SoundSpec } from '@rpg/engine';
/** Реестр спек-звуков (ключи валидируются тем же validate-тестом, что и WAV). */
export const SPEC_SFX: Record<string, SoundSpec> = {
// Бывший sfx/bell_hit.wav (bellHit): 4 партиала + клик, normalize 0.7.
'sfx/bell_hit': { kind: 'chime', dur: 0.35, freq: 520, power: 5, seed: 1, peak: 0.7 },
// Бывший sfx/whoosh.wav (whoosh): воздух «0 → 1 → 0», normalize 0.4.
'sfx/whoosh': { kind: 'scrape', dur: 0.7, low: 200, high: 2400, seed: 160, swell: true, peak: 0.4 }
};
/**
* Единая точка проигрывания sfx по ключу: спек-звук — через playSpec
* (движок компилирует сам), файловый — через play. Все play-сайты игры
* зовут этот хелпер, а не audio.play напрямую.
*/
export function playSfx(audio: AudioManager, key: string, opts?: number | PlayOptions): void {
const spec = SPEC_SFX[key];
if (spec) void audio.playSpec(key, spec, opts);
else void audio.play(key, opts);
}