156 lines
4.0 KiB
Markdown
156 lines
4.0 KiB
Markdown
# Projektbeschreibung (Extended)
|
||
## Baldur’s Gate EE – Dual-Language Live-TTS System
|
||
|
||
## Zielsetzung
|
||
Das Projekt entwickelt ein System, das **BG1 Enhanced Edition**
|
||
während des Spielens in **Deutsch und Englisch** automatisch vertont
|
||
und per Hotkey zwischen den Sprachen umschaltet.
|
||
|
||
**Keine Änderung an der Engine.
|
||
Kein Wine-Gefrickel.
|
||
Saubere, modulare Architektur.**
|
||
|
||
---
|
||
|
||
# Architekturübersicht
|
||
|
||
## ASCII-Diagramm – Systemkomponenten
|
||
|
||
```
|
||
+-----------------+ +------------------+
|
||
| BG1EE (Game) | | Dialog-Hook |
|
||
|-----------------| ID --> | Lua Listener |
|
||
| Dialog Window | | (OnNodeChange) |
|
||
+-----------------+ +------------------+
|
||
|
|
||
v
|
||
+----------------------+
|
||
| TTS Controller |
|
||
| (FastAPI Service) |
|
||
+----------+-----------+
|
||
|
|
||
+----------------+----------------+
|
||
| |
|
||
v v
|
||
+-----------------------+ +-----------------------+
|
||
| TLK+DLG DB (JSON) | | TTS Engines |
|
||
| text_de, text_en | | Melo, Kokoro, F5 |
|
||
+----------+------------+ +-----+----------------+
|
||
| |
|
||
v |
|
||
+------------------+ |
|
||
| Audio Cache | |
|
||
| lineID_lang.wav | <-----------------+
|
||
+--------+---------+
|
||
|
|
||
v
|
||
+------------------+
|
||
| Audio Playback |
|
||
+------------------+
|
||
```
|
||
|
||
---
|
||
|
||
# Datenfluss-Diagramm
|
||
|
||
```
|
||
Spiel zeigt Dialog → Hook erkennt Node → sendet ID → Backend prüft Cache:
|
||
Wenn vorhanden → Sofort abspielen
|
||
Wenn nicht → Text(DE/EN) holen → TTS generieren → speichern → abspielen
|
||
Sprache wechseln → Backend toggelt Runtime-Flag
|
||
```
|
||
|
||
---
|
||
|
||
# Datenmodell (vereinfacht)
|
||
|
||
```json
|
||
{
|
||
"id": 47281,
|
||
"speaker": "Imoen",
|
||
"text": {
|
||
"de": "Hey, wach auf! Es ist etwas im Busch!",
|
||
"en": "Hey, wake up! Something's not right!"
|
||
},
|
||
"options": [
|
||
{ "id": 47282, "reply_de": "Was ist los?", "reply_en": "What's happening?" }
|
||
]
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
# TTS-Backend Architektur
|
||
|
||
- **FastAPI**
|
||
- Endpunkte:
|
||
- `/speak/<id>`
|
||
- `/set_language/de|en`
|
||
- `/status`
|
||
- `/cache/clear`
|
||
- Intern:
|
||
- DB-Lookup → Text holen
|
||
- Engine auswählen
|
||
- WAV generieren
|
||
- Abspielen
|
||
- Logging (Dialog-ID, Dauer, Engine, Sprache)
|
||
|
||
---
|
||
|
||
# Projektplan (Roadmap)
|
||
|
||
## Phase 1 – Extract (READY TO START)
|
||
- BG1EE installieren
|
||
- Near Infinity einrichten
|
||
- Deutsch & Englisch TLK extrahieren
|
||
- DLG-Bäume exportieren
|
||
- JSON vereinheitlichen
|
||
|
||
## Phase 2 – Parser & Datenmodell
|
||
- Python-Modul bauen
|
||
- Konsistenzprüfungen (IDs müssen matchen)
|
||
- NPC-Zuordnungen
|
||
- Szenenstruktur optional
|
||
|
||
## Phase 3 – TTS Service
|
||
- FastAPI-Server
|
||
- Sprache als Runtime-State
|
||
- Engine-Abstraktionslayer
|
||
- Audio-Caching
|
||
- Playback-Pipeline
|
||
|
||
## Phase 4 – Lua Ingame Listener
|
||
- BGEE Mod erstellen
|
||
- Events `OnDialogStart` + `OnDialogNodeChange` abgreifen
|
||
- HTTP Requests an TTS Server
|
||
|
||
## Phase 5 – Live Umschaltung
|
||
- Hotkey-System
|
||
- Ereignis → REST → TTS-State ändern
|
||
- Visual Logging
|
||
|
||
## Phase 6 – Testing
|
||
- Kapitel 1 vollständige Tests
|
||
- Langtext-Szenen (Gorion, Imoen, Candlekeep)
|
||
- Performance testen
|
||
- Audio-Lag eliminieren
|
||
|
||
## Phase 7 – Erweiterungen
|
||
- individuelle NPC-Stimmen
|
||
- Emotionserkennung (stimmungsbasierte Modelle)
|
||
- Prosodie-Mapping
|
||
- BG2EE Integration
|
||
- Mod-Support
|
||
|
||
---
|
||
|
||
# Vision
|
||
Ein vollständig automatisiertes, zweisprachiges,
|
||
KI-vertontes Baldur’s Gate EE –
|
||
mit Möglichkeit zum sofortigen Umschalten, eigenen Voices,
|
||
und einer Engine-agnostischen Pipeline,
|
||
die auf jeden Infinity-Engine Titel angewendet werden kann.
|
||
|
||
---
|
||
|