Fighting Game · Guides & deep dives

Voice-Over Asset Management

Each launch locale has a logical voice root at

3sections2 minread

On this page

This document defines voice-over asset management for TODOS.phase-72.72.11.2.6. It establishes the per-locale VO directory structure, naming conventions, file format requirements, metadata sidecars, and rights-tracking fields used by later recording, integration, lip-sync, and subtitle timing tasks.

The tracked contract is V2/ue/Content/Localization/V2/VoiceOverAssetManagement_V2_Contract.json. The managed manifest lives in V2/ue/Content/Localization/V2/VoiceOver/VoiceOverAssetManifest_V2.json, and the deterministic generated report lives in V2/ue/Content/Localization/V2/VoiceOver/VoiceOverAssetManagementReport_V2.json.

Directory Structure#

Each launch locale has a logical voice root at V2/ue/Content/V2/Audio/Voice/{locale} and an Unreal root at /Game/V2/Audio/Voice/{locale}. Each locale owns the same five voice banks: announcer, fighter barks, story dialogue, tutorial, and system.

Every bank declares source_wav, imported_uasset, and metadata subdirectories. Launch voice-over locales and subtitle-only patch-plan locales use the same structure so pickup recordings can land without changing import rules.

Naming And Format#

Source voice files use the pattern VO_{localeToken}_{bankToken}_{speakerId}_{stringId}_T{take}.wav. Locale tokens replace hyphens with underscores, and take numbers are always two digits.

The required source format is 48 kHz, 24-bit mono PCM WAV at -23 LUFS with a maximum true peak of -1 dBTP. Metadata sidecars use .voasset.json and must carry string ID, locale, speaker, voice bank, take, duration, source WAV hash, and rights ID.

Validation#

V2/ue/Tools/generate-v2-voice-over-asset-management.py reads the manifest and the localization voice-over pipeline contract, then emits a report covering all 22 launch locales, 110 bank directories, 330 bank subdirectories, and 110 naming examples.

V2/ue/Tools/check-v2-voice-over-asset-management.py validates the contract, manifest, generated report, deterministic output, documentation, GitHub workflow wiring, and Horde required gates. The checker also runs a negative case that removes one voice bank and changes the sample rate to verify the generator fails invalid asset-management rules.