Аудио: под-шины и сведение

Решение по организации SFX-микса (принято Максом 2026-07-18). Канон-дом для ссылок audio-subbuses из бэклога звука. Реализация — за фасадом IAudioService на FMOD Studio (контур xgaida-x-nixi-audio).

Связано: Vision - Audio & SFX Backlog, Meta - Decision Journal.

Решение

Подкатегории SFX = FMOD под-шины, не свой C#-слой:

bus:/SFX/Combat     — боевые звуки (удары, касты, смерти)
bus:/SFX/UI         — интерфейс (клик, ховер, открытие экранов)
bus:/SFX/Ambient    — окружение
bus:/SFX/Stingers   — стингеры (battle/victory/defeat/kill)
  • Заложить рано как шов (принцип «дорогое-в-ретрофите — рано»): развести события по под-шинам при следующем заходе в FMOD-проект, пока каталог звука мал.
  • Роутинг event → bus живёт в FMOD Studio. Наш код не меняется: ключи {contentId}.{action}, AudioCatalog, AudioAction (Ui/Hit/Cast/Stinger…) уже де-факто категоризируют звук — этого достаточно, чтобы назначить под-шину на стороне FMOD.

Чего НЕ делаем

Свой C#-инструмент сведения средней громкости категорий — НЕ строим. Средняя громкость группы звуков — это ровно то, для чего существует микшер FMOD Studio (шины, fader, VCA, mixer snapshots). Свой тул поверх = дублирование FMOD и нарушение HARD-правила аудио-контура: микс живёт за FMOD, игровая логика FMOD API напрямую не трогает.

Бонус-стык

Mixer snapshot под boss-intro title card: приглушить bus:/SFX/Combat, поднять стингер — красивый акцент на входе в бой с боссом. Требует наличия под-шин (ещё одна причина заложить их рано).

Как применять

  • Новые SFX роутить в под-шину прямо в FMOD Studio — код не трогать.
  • Наш код трогать только если геймдизайн настроек захочет раздельный слайдер громкости категории: тогда IAudioService.SetVolume(busPath, v) + поле в SettingsService. Сейчас — YAGNI.