# TTS Fallback For Missing VO

This document defines the text-to-speech fallback for missing VO required by
`TODOS.phase-72.72.11.2.13`. The fallback uses platform TTS when recorded
voice-over is missing, while still preferring recorded VO whenever source WAV
coverage is present. This covers accessibility playback and incomplete
localizations without hiding the missing recording from production reports.

The tracked contract is
`V2/ue/Content/Localization/V2/TTSFallbackForMissingVO_V2_Contract.json`. The
generated fallback plan is
`V2/ue/Content/Localization/V2/VoiceOver/TTSFallback/TTSFallbackForMissingVO_V2.json`,
with summary coverage in
`V2/ue/Content/Localization/V2/VoiceOver/TTSFallback/TTSFallbackForMissingVOReport_V2.json`.

## Runtime Path

`UV2DialogueRuntimeLibrary::BuildDialogueVoiceOverTtsFallbackViewModel` accepts
the line ID, locale, localized text, speaker name, source voice cue, and
platform TTS voice ID for a dialogue line. It keeps recorded VO when audio is
available, queues platform TTS when a localization is incomplete, and can also
queue TTS for accessibility even when recorded VO exists.

The helper returns a view model with:

- `bUseRecordedVoiceOver` when the localized source WAV and voice cue are
  present.
- `bUsePlatformTextToSpeech` when platform TTS should be queued.
- `bFallbackBecauseMissingVoiceOver` when TTS is specifically replacing missing
  VO.
- `TextToSpeechUtterance` built from speaker name plus localized line text.
- `PlatformTextToSpeechVoiceId` matching the selected locale.

## Generated Fallback Plan

`V2/ue/Tools/generate-v2-tts-fallback-for-missing-vo.py` reads
`VoiceOverIntegrationPipeline_V2.json` and the recording script export. Each
integration row that reports missing audio becomes a platform TTS fallback row.
Rows with matched audio stay on recorded VO so temporary TTS does not mask
finished localization work.

`V2/ue/Tools/check-v2-tts-fallback-for-missing-vo.py` validates deterministic
generation, the all-missing VO case, an all-recorded VO case with temporary
source WAVs, missing text rejection, runtime helper coverage, CI wiring, Horde
gates, and this document.
