Files
HomuraHime-Mods/docs/AUDIO_ANALYSIS.md
Ed_ 7169d4533b Phase 1: Setup project structure and tool installation guide
- Created project directory structure
- Added docs/SETUP_PHASE1.md with tool installation instructions
- Added docs/AUDIO_ANALYSIS.md with game audio architecture
- Added src/HomuraHimeAudioMod/ BepInEx plugin skeleton
- Added patch stubs for VoiceManager, AudioDucking, EnemyAudio
- Configured .gitignore for build artifacts and game files
- Initialized beads issue tracker
2026-03-22 13:35:01 -04:00

6.9 KiB

HomuraHime Audio System Analysis

Game Overview

  • Engine: Unity 2022.3.x
  • Audio Engine: FMOD Studio 2.02.x with Google Resonance spatial audio
  • Voice Manager: UtageFmodVoiceManager (adapted Utage framework)
  • Platform: Steam (uses Steamworks.NET)

Audio Architecture

Directory Structure

HomuraHime_Data\
├── Managed\
│   ├── Assembly-CSharp.dll          (7.08 MB - main game logic)
│   ├── Assembly-CSharp-firstpass.dll (3.92 MB - runtime code)
│   ├── FMODUnity.dll               (239 KB - FMOD Unity integration)
│   ├── FMODUnityResonance.dll      (11 KB - FMOD Resonance extension)
│   └── UnityEngine.AudioModule.dll
├── Plugins\x86_64\
│   ├── fmodstudio.dll              (3.16 MB - FMOD core)
│   └── resonanceaudio.dll          (817 KB - Google Resonance spatial)
└── StreamingAssets\FMOD\Desktop\
    └── (49 FMOD bank files - ~1.3 GB total)

FMOD Bank Files

Bank Purpose Size (streams)
Master.bank Main mixer and routing 98.5 KB
BGM.bank Background music (general) 63.83 MB
BGM_Default.bank Default BGM 224.07 MB
BGM_Hub.bank Hub area music 14.67 MB
BGM_Lv0-Lv5, BGM_LvF Level-specific music 14-64 MB each
Ambience.bank Environmental sounds 150.97 MB
SFX.bank Sound effects 188.97 MB
Voice.bank Character voice 19.83 MB
PreLoad_Jump.bank Pre-cached jump sounds ~533 KB
PreLoad_FootStep_Land.bank Pre-cached footstep sounds ~1 MB

Total Audio: ~1.3 GB across 49 bank files

Key Audio Classes

Voice Management

  • UtageFmodVoiceManager - Main voice manager (Utage framework adapted)
  • CFVoiceData / CFVoiceEventUtility - Custom voice event system
  • CharacterVoiceData - Character voice data handling
  • FmodVoiceStopper - Voice stop controller
  • get_CountVoice / get_IsPlayingVoice - Voice count monitoring

Sound Management

  • FMODSoundManager - Main FMOD sound manager
  • SoundManager (Utage base) - Base sound manager
  • FmodSFXEventSO, FmodSFXEventRef, FmodSFXEventDispatcher - Custom SFX system
  • FMODEventInstance - FMOD event instance wrapper

Channel/Volume Control

  • FMOD_Channel - Custom FMOD channel wrapper
  • VCASetting - Volume control area settings
  • TaggedMasterVolume - Per-tag master volume control
  • BGMChannel - BGM channel management

Audio Effects

  • UpdateDucking / DuckVolume - Audio ducking system
  • SnapshotManager - Snapshot management
  • FmodReverbEventController - Reverb control
  • ZoneReverbHandler - Zone-based reverb

Spatial Audio

  • HHFmodListenerPosController - FMOD listener position controller
  • resonanceaudio.dll - Google Resonance spatial audio

Pooling

  • SimplePool / ObjectPool - Generic object pooling
  • DEFAULT_POOL_SIZE, VfxObjectPoolSize - Pool size constants

Voice Event Constants (CFVOICE Events)

The game triggers voice events for various situations:

  • CFVOICE_REWARD - Reward sounds
  • CFVOICE_CHALLENGEBATTLE - Challenge battle start
  • CFVOICE_BATTLE - Battle start
  • CFVOICE_NOTE - Note/commentary
  • CFVOICE_MHCHASING - Chasing sequences
  • CFVOICE_ELECTRIFYING - Electrifying events
  • CFVOICE_HH / HH_Behaviour - HomuraHime behavior events
  • CFVOICE_ENEMY - Enemy-related voice
  • CFVOICE_QTE_SHIKIGAMI - QTE shikigami events
  • CFVOICE_BATTLERANK - Battle rank announcements
  • And many more...

Enemy System

Enemy Audio Triggers

  • EnemyBehaviorManger - Enemy behavior management
  • EnemyAttackBase, EnemyAttackAction, EnemyAttackBlockedAction - Attack handling
  • EnemyIndicatorController - Visual indicators for enemies
  • SetEnemyAI - AI setting method
  • EnemyState - Enemy state tracking

HUD/Indicator Classes

  • HUDIndicatorPhase / HUDIndicatorPhaseHandler - Phase indicator handling
  • CDHUDIndicatorHandler - Cooldown HUD indicator
  • IndicatorManager - Indicator management

Audio Configuration

  • DEFAULT_POOL_SIZE - Default pool size
  • VfxObjectPoolSize - VFX pool size
  • ObjectPoolSize - Generic object pool size
  • poolPreloadnum - Pool preload count
  • preloadCountPerPrefab - Per-prefab preload count

FMOD Channel Constants

  • MAXCHANNELS - Maximum channel count
  • ERR_TOOMANYCHANNELS - Channel overflow error
  • ERR_CHANNEL_ALLOC - Channel allocation error
  • VIRTUALVOICE - Virtual voice management
  • CHANNELPRIORITY - Channel priority setting
  • MAX_CHANNEL_WIDTH - Maximum channel width

Key Findings

  1. No explicit voice limit constants visible in string analysis - voice limit may be managed internally by FMOD or Utage framework
  2. Audio ducking system exists - UpdateDucking and DuckVolume present
  3. Voice pooling exists - Object pooling with DEFAULT_POOL_SIZE constants
  4. Lip-sync support - Using uLipSyncFMOD for voice synchronization
  5. Priority system - CHANNELPRIORITY and Priority fields for channel prioritization
  6. Event-driven voice system - Voices triggered via CFVOICE event constants

Source File Paths (from DLL strings)

These are the original Unity asset paths in the game source:

  • Assets/4.Developer/Andy/UtageVoiceManager/UtageFmodVoiceManager.cs
  • Assets/4.Developer/Andy/UtageVoiceManager/UtageFmodVoiceSetting.cs
  • Assets/4.Developer/Andy/UtageVoiceManager/FmodVoiceStopper.cs
  • Assets/4.Developer/Andy/UtageVoiceManager/DEAudioFadeManager.cs
  • Assets/4.Developer/Andy/UtageVoiceManager/SnapshotManager.cs
  • Assets/4.Developer/Andy/UtageVoiceManager/FmodReverbEventController.cs
  • Assets/1.HonoHime/Core/FMODUtility/Scripts/FMODSoundManager.cs
  • Assets/1.HonoHime/Core/FMODUtility/Scripts/MMFeedbacks/FMOD_Channel.cs
  • Assets/1.HonoHime/Core/mLibrary/ObjectPool/SimplePool.cs

Game Data Files

Audio-related configuration may exist in:

  • HomuraHime_Data\StreamingAssets\HomuraHimeData\csv\EnemyData.json
  • HomuraHime_Data\StreamingAssets\HomuraHimeData\json\BattleRound.json
  • HomuraHime_Data\StreamingAssets\HomuraHimeData\json\EnemyData.json

Potential Audio Glitch Causes

Based on architecture analysis:

  1. Voice Limit Exhaustion - Too many simultaneous FMOD events
  2. Missing Audio Ducking Rules - No automatic volume reduction during intense combat
  3. Improper Event Instance Cleanup - Voices not being released properly
  4. CPU Pressure from Spatial Audio - Resonance audio processing overhead
  5. Pool Size Limitations - Object pool too small for audio components

Enemy Behavior Indicator Issues

Potential causes for unclear enemy audio cues:

  1. Low Mix Volume - Enemy sounds mixed too low in Master.bank
  2. Insufficient Spatial Positioning - Sounds not directional enough
  3. Lack of State Variation - Same sounds for all enemy states
  4. Audio Masking - Other sounds drowning out enemy cues
  5. Missing Parameter Changes - No FMOD parameter automation for enemy state