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.