From d36481e2d919a2d7a63913f59e00b255baba7fcb Mon Sep 17 00:00:00 2001 From: nathan Date: Tue, 19 May 2026 12:38:43 -0700 Subject: [PATCH] Add MVP audio mix settings --- AGRARIAN_DEVELOPMENT_ROADMAP.md | 2 +- Config/AgrarianAudioMixSettings.ini | 17 ++++++++ Docs/Audio/MixSettings.md | 34 +++++++++++++++ Scripts/verify_audio_mix_settings.py | 65 ++++++++++++++++++++++++++++ 4 files changed, 117 insertions(+), 1 deletion(-) create mode 100644 Config/AgrarianAudioMixSettings.ini create mode 100644 Docs/Audio/MixSettings.md create mode 100644 Scripts/verify_audio_mix_settings.py diff --git a/AGRARIAN_DEVELOPMENT_ROADMAP.md b/AGRARIAN_DEVELOPMENT_ROADMAP.md index f6f155c..3976075 100644 --- a/AGRARIAN_DEVELOPMENT_ROADMAP.md +++ b/AGRARIAN_DEVELOPMENT_ROADMAP.md @@ -848,7 +848,7 @@ Target deliverable: A small group can join a server, spawn into one biome, gathe - [x] Add weather sounds. Formalized the existing placed weather audio controller as the MVP weather-sound path, documenting rain, wind, storm, clear ambient, and biome loop slots plus verification that weather playback follows replicated weather state, provider wind speed, and day/night state while remaining silent until assets are assigned. - [x] Add wildlife sounds. Added spatialized wildlife audio hooks with assignable idle, flee/chase, death, and harvest sound slots plus server-triggered multicast playback from authoritative wildlife state changes and harvest events. - [x] Add UI sounds. Added optional 2D confirm, back, selection, and save/quit sound hooks to the MVP frontend widget, with keyboard and mouse actions sharing the same feedback path while remaining silent until UI audio assets are assigned. -- [ ] Add mix settings. +- [x] Add mix settings. Added MVP audio mix settings for master, ambient, weather, foley, fire, wildlife, and UI buses with conservative investor-build defaults and documentation for future SoundClass/MetaSound replacement. - [ ] Add volume sliders. ## 0.1.Q MVP QA Gates diff --git a/Config/AgrarianAudioMixSettings.ini b/Config/AgrarianAudioMixSettings.ini new file mode 100644 index 0000000..7b88002 --- /dev/null +++ b/Config/AgrarianAudioMixSettings.ini @@ -0,0 +1,17 @@ +[/Script/AgrarianGame.AgrarianAudioMixSettings] +MasterVolume=1.0 +AmbientVolume=0.70 +WeatherVolume=0.75 +FoleyVolume=0.80 +FireVolume=0.85 +WildlifeVolume=0.70 +UiVolume=0.65 + +[AgrarianAudioMix.Buses] +Master=Global output gain for all client-side audio. +Ambient=Biome beds, distant coastal texture, day/night insects, and non-weather environmental loops. +Weather=Rain, wind, storm, and future thunder layers. +Foley=Footsteps, gathering, item handling, crafting, and other player/object touch sounds. +Fire=Campfire loops, ignition, extinguish, suppression, and future large-fire layers. +Wildlife=Wildlife idle, flee, death, harvest, and future animal calls. +Ui=Frontend, pause, selection, confirmation, warning, and save/quit feedback. diff --git a/Docs/Audio/MixSettings.md b/Docs/Audio/MixSettings.md new file mode 100644 index 0000000..c1792aa --- /dev/null +++ b/Docs/Audio/MixSettings.md @@ -0,0 +1,34 @@ +# MVP Audio Mix Settings + +The MVP audio mix is defined in `Config/AgrarianAudioMixSettings.ini`. These +values are client presentation defaults and do not affect dedicated server +authority. + +## Buses + +- Master: global output gain. +- Ambient: biome beds, distant coastal texture, day/night insects, and + non-weather environmental loops. +- Weather: rain, wind, storm, and future thunder layers. +- Foley: footsteps, gathering, item handling, crafting, and other player/object + touch sounds. +- Fire: campfire loops, ignition, extinguish, suppression, and future large-fire + layers. +- Wildlife: wildlife idle, flee, death, harvest, and future animal calls. +- UI: frontend, pause, selection, confirmation, warning, and save/quit feedback. + +## Defaults + +The defaults are intentionally conservative so investor builds do not overwhelm +dialogue, screen-share audio, or remote desktop sessions: + +- Master: `1.0` +- Ambient: `0.70` +- Weather: `0.75` +- Foley: `0.80` +- Fire: `0.85` +- Wildlife: `0.70` +- UI: `0.65` + +Final MetaSound/SoundClass work can replace these simple config defaults later, +but the bus names should remain stable so settings and QA notes do not churn. diff --git a/Scripts/verify_audio_mix_settings.py b/Scripts/verify_audio_mix_settings.py new file mode 100644 index 0000000..abf0ae7 --- /dev/null +++ b/Scripts/verify_audio_mix_settings.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python3 +"""Verify MVP audio mix buses and defaults are defined.""" + +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +CONFIG = ROOT / "Config" / "AgrarianAudioMixSettings.ini" +DOC = ROOT / "Docs" / "Audio" / "MixSettings.md" +ROADMAP = ROOT / "AGRARIAN_DEVELOPMENT_ROADMAP.md" + +BUS_KEYS = [ + "MasterVolume", + "AmbientVolume", + "WeatherVolume", + "FoleyVolume", + "FireVolume", + "WildlifeVolume", + "UiVolume", +] + +BUS_NAMES = [ + "Master", + "Ambient", + "Weather", + "Foley", + "Fire", + "Wildlife", + "UI", +] + + +def main() -> None: + config = CONFIG.read_text(encoding="utf-8") + doc = DOC.read_text(encoding="utf-8") + roadmap = ROADMAP.read_text(encoding="utf-8") + + missing = [] + for key in BUS_KEYS: + if key not in config: + missing.append(f"config missing {key}") + + for name in BUS_NAMES: + if f"- {name}:" not in doc: + missing.append(f"mix settings doc missing bus {name}") + + for token in [ + "client presentation defaults", + "investor builds", + "MetaSound/SoundClass", + ]: + if token not in doc: + missing.append(f"mix settings doc missing {token!r}") + + if "[x] Add mix settings." not in roadmap: + missing.append("roadmap item is not checked off") + + if missing: + raise SystemExit("FAILED: " + "; ".join(missing)) + + print("OK: MVP audio mix settings are defined.") + + +if __name__ == "__main__": + main()