Zum Inhalt

Phase 3 — XTTS v2 Zero-Shot Tests

Überblick

Modell: Coqui XTTS v2
Ansatz: Zero-Shot Voice Cloning ohne Training
Hardware: NVIDIA RTX A6000 (48 GB VRAM)

XTTS v2 ist ein multilingual trainiertes TTS-Modell, das mit nur einer kurzen Referenz-Audiodatei (< 10 Sek.) eine Stimme klonen kann — ohne Fine-Tuning.

Installation

# Auf GPU-VM (RTX A6000)
pip install --no-cache-dir torch==2.3.1 torchaudio==2.3.1 \
  --index-url https://download.pytorch.org/whl/cu121

pip install TTS

# TOS automatisch akzeptieren (für automatisierte Pipelines)
python -c "import TTS.utils.manage as manage; manage.ModelManager.ask_tos = lambda self, x: True"

Architektur

┌───────────────────────────────────────────────────────────────┐
│                    XTTS v2 PIPELINE                          │
│                                                                │
│   REFERENZ (6 Sek.)          TEXT                    OUTPUT    │
│   ┌───────────────┐      ┌───────────────┐      ┌─────────┐ │
│   │ WAV-Datei    │      │  Deutscher    │      │ WAV     │ │
│   │ (Stimme)     │ ────▶│  Text         │ ────▶│ 24kHz   │ │
│   └───────────────┘      └───────────────┘      └─────────┘ │
│                                                                │
│   Modell: tts_models/multilingual/multi-dataset/xtts_v2      │
│   Sprache: "de" (Deutsch wird toleriert, nicht meistert)     │
└───────────────────────────────────────────────────────────────┘

Durchgeführte Tests

Test 1: Erste Generierung

from TTS.api import TTS
import soundfile as sf

tts = TTS("tts_models/multilingual/multi-dataset/xtts_vts_v2").to("cuda")

wav = tts.tts(
    text="Hallo, das ist ein Test. Wie klingt diese Stimme?",
    speaker_wav="referenz.wav",
    language="de"
)

sf.write("output.wav", wav, 24000)

Ergebnis: - ✅ Verständlich - ⚠️ Sehr quengelig/weich - ❌ Fehlende deutsche Härte ("ch", "r", Umlaute)

Test 2: Weniger Satzzeichen

Hypothese: Weniger Kommas/Punkte = flüssigere Aussprache

# DIREKTER TEXT (weniger Pausen)
text1 = "Hallo das ist ein Test wie klingt diese Stimme"

# NORMALER TEXT
text2 = "Hallo, das ist ein Test. Wie klingt diese Stimme?"

Ergebnis: Minimaler Unterschied. Das Modell setzt selbst Pausen.

Test 3: Audio-Tempo erhöhen

Hypothese: Schnellere Wiedergabe = weniger quengelig

from pydub import AudioSegment

audio = AudioSegment.from_wav("output.wav")
# 15% schneller
fast_audio = audio.speedup(playback_speed=1.15)
fast_audio.export("output_fast.wav", format="wav")

Ergebnis: Klingt dynamischer, aber die "Quengeligkeit" bleibt.

Test 4: Langer Text (Drift-Problem)

Hypothese: Längere Texte bleiben stabil

long_text = """Hallo und herzlich willkommen zu diesem Test.
Heute möchte ich die Qualität der Sprachausgabe demonstrieren.
Dies ist ein längerer Text um zu testen ob das Modell stabil bleibt."""

wav = tts.tts(text=long_text, speaker_wav=ref, language="de")

Ergebnis: - ❌ Erste Hälfte: Verständlich - ❌ Zweite Hälfte: Kompletter Wortsalat - ❌ Das Modell "driftet" bei langem deutschen Text

Test 5: Kurze Segmente (Segment-Lösung)

Lösung: Text in kurze Sätze zerlegen, einzeln generieren, zusammenfügen

import numpy as np

texts = [
    "Hallo und herzlich willkommen.",
    "Dies ist ein Test der Sprachausgabe.",
    "Ich hoffe es klingt natürlich und klar."
]

all_audio = []
for text in texts:
    wav = tts.tts(text=text, speaker_wav=ref, language="de")
    all_audio.append(wav)

# Zusammenfügen mit kurzen Pausen
combined = np.concatenate(all_audio)

Ergebnis: - ✅ Kein Drift mehr - ✅ Jedes Segment verständlich - ⚠️ Aber: "Quengeligkeit" bleibt — das ist ein Modell-Problem, kein Text-Problem

Kumulative Bewertung

Test Text-Klarheit Stimmen-Ähnlichkeit Sound-Qualität Räumlichkeit Gesamt
Test 1 (Erste Generierung) 3/5 2/5 3/5 2/5 2,5/5
Test 2 (Weniger Satzzeichen) 3/5 2/5 3/5 2/5 2,5/5
Test 3 (Schnelleres Tempo) 3,5/5 2/5 3,5/5 2/5 2,75/5
Test 4 (Langer Text) 2/5 2/5 2/5 2/5 2/5
Test 5 (Kurze Segmente) 4/5 2/5 3,5/5 2/5 2,875/5

Endbewertung XTTS v2

Kriterium Bewertung Kommentar
Text-Klarheit 3,5/5 Mit Segment-Lösung OK
Stimmen-Ähnlichkeit 2/5 Kaum erkennbar
Sound-Qualität 3,5/5 Gut, aber quengelig
Räumlichkeit 2/5 Flach
Gesamt 2,75/5 Nutzbar für Prototypen, nicht für Produktion

Warum XTTS v2 bei Deutsch scheitert

┌────────────────────────────────────────────────────────────┐
│              XTTS v2 TRAININGSDATEN                        │
├────────────────────────────────────────────────────────────┤
│                                                            │
│   Englisch     ████████████████████████████████████  70%  │
│   Spanisch     ████████████                          10%  │
│   Französisch  ███████                              7%   │
│   Deutsch      ██                                   3%   │
│   Sonstige     ██████                              10%   │
│                                                            │
│   German ist eine "Gast-Sprache" — das Modell toleriert   │
│   Deutsch, hat es aber nie wirklich gelernt.              │
│                                                            │
│   Fehlende deutsche Phonetik:                             │
│   • "ch" wie in "ich" — zu weich                         │
│   • "r" wie in "rot" — zu rollend                        │
│   • Umlaute (ä, ö, ü) — falsch positioniert              │
│   • Endungen (-ung, -heit) — zu nasal                    │
│                                                            │
└────────────────────────────────────────────────────────────┘

Fazit

XTTS v2 ist ein beeindruckendes Modell für Englisch, aber für Deutsch unzureichend. Die "Quengeligkeit" und der Wortsalat bei längerem Text sind keine Konfigurationsprobleme, sondern Trainingsprobleme.

Mögliche Verbesserungen: 1. XTTS v2 Fine-Tuning mit 30+ Min. deutschen Daten → Könnte helfen 2. Kommerzielle APIs → Sofort besser, aber kostenpflichtig


Nächster Schritt: Phase 4: CosyVoice Tests