---
name: "tts-prompter"
description: "MUSS vor TTS-Generierung gelesen werden. Trennung Text/Style, Markup vs natürliche Sprache."
---

# tts-prompter

Diese Skill **MUSS gelesen werden, BEVOR der Generierungsmodus für Text-to-Speech (TTS)-Aufgaben aufgerufen wird**.

Behandelt das Framework zur Prompt-Erstellung, die Trennung von gesprochenem Text und Stilanweisungen sowie die Verwendung von Markup-Tags im Vergleich zu natürlicher Sprache für Emotionen und Nicht-Sprachgeräusche.

## Wann verwenden

**Pflicht-Lektüre** bei:
- TTS, Voiceover, Sprachausgabe, Audio-Generation aus Text
- Hörbuch, Podcast-Snippet, Charakter-Stimme
- Multi-Speaker-Dialoge

## Tool

- **Primär:** `tts` (OpenClaw built-in)

## Kernprinzip: Text vs. Style

**TRENNUNG ist entscheidend.** Was wird gesprochen vs. wie wird es gesprochen.

| Gehört wohin | Beispiel |
|---|---|
| **In den gesprochenen Text** | Wörter, Sätze, Pausen-Punctuation |
| **In den Style-Prompt** | Stimmung, Geschwindigkeit, Akzent, Charakter |

❌ **Falsch:**
> "[fröhlich] Hallo wie geht's [lacht] mir gut [seufzt]"

→ Manche Provider sprechen die Tags wörtlich aus.

✅ **Richtig (je nach Provider):**

**Option A — Markup-Tags (wenn Provider sie versteht):**
```
<voice style="cheerful">Hallo, wie geht es dir?</voice>
<break time="500ms"/>
<voice style="laughing">Mir geht es gut!</voice>
```

**Option B — Natürliche Sprache im Prompt:**
```
prompt: "Spreche fröhlich und energisch, mit kurzem Lachen zwischendurch"
text: "Hallo, wie geht es dir? Mir geht es gut!"
```

## Provider-Capabilities

| Provider | Markup | Multi-Voice | Languages |
|---|---|---|---|
| **ElevenLabs** | SSML-light | ✓ (via voice_id) | 30+ |
| **OpenAI TTS** | nein | nein | viele |
| **Azure Speech** | Full SSML | ✓ | viele |
| **Google TTS** | SSML | ✓ | viele |
| **Coqui XTTS** | begrenzt | ✓ (Cloning) | 17 |

**Bei OpenClaw:** primär ElevenLabs. SSML-Subset funktioniert, eckige Klammern werden meist gesprochen.

## SSML-Basics (wenn unterstützt)

```xml
<speak>
  <prosody rate="slow" pitch="+2st">
    Langsam und höher
  </prosody>
  <break time="700ms"/>
  <emphasis level="strong">Wichtig!</emphasis>
  <say-as interpret-as="date" format="dmy">10.06.2026</say-as>
</speak>
```

## Natürliche Sprache Style-Prompts

Wenn kein SSML → Style-Anweisungen in eigenes Feld:

```
voice: "calm, mature female"
emotion: "warm, slightly melancholic"
pace: "slow, contemplative"
text: "..."
```

**Adjektiv-Vokabular:**

| Kategorie | Wörter |
|---|---|
| Emotion | cheerful, sad, angry, calm, excited, nervous, confident, sarcastic |
| Tempo | slow, measured, brisk, rushed, deliberate |
| Pitch | high, low, deep, breathy, raspy |
| Tone | warm, cold, friendly, authoritative, intimate |
| Character | narrator, news-anchor, child, elder, robot |

## Nicht-Sprache-Geräusche

⚠️ **Provider-spezifisch.** Generell:

- **Pausen:** Punkt + Komma im Text, oder `<break>` SSML
- **Lachen / Seufzen:** Style-Prompt oder ElevenLabs `[laughs]`-Notation (provider-dep)
- **Atmen:** meist nicht zuverlässig steuerbar

**Pause-Trick (provider-agnostisch):**
- Komma = 200ms Pause
- Punkt = 400ms Pause
- "..." = 600-800ms Pause
- Zeilenumbruch = oft längere Pause

## Multi-Speaker-Dialoge

**Pro Sprecher eigenen TTS-Call**, dann mit ffmpeg konkatenieren:

```bash
ffmpeg -i sprecher_a.mp3 -i pause.mp3 -i sprecher_b.mp3 \
       -filter_complex "[0][1][2]concat=n=3:v=0:a=1" out.mp3
```

Oder bei Provider mit Multi-Voice: Voice-IDs pro Block setzen.

## Sprach-Spezifika

| Sprache | Notes |
|---|---|
| Deutsch | Umlaute korrekt (ä/ö/ü, nicht ae/oe/ue), Zahlen ausschreiben für Klarheit |
| Englisch | UK vs US Akzent im Style angeben |
| Italienisch/Spanisch | Akzente erhalten (á, é, ñ) |
| Japanisch | meist Hiragana/Katakana, Romaji manchmal nötig |

## Workflow

1. **Text vorbereiten:** sauberer Plaintext, Punctuation für Pausen
2. **Style klären:** Voice + Emotion + Pace separat
3. **Provider wählen:** abhängig von Sprache + Multi-Voice
4. **Test-Snippet** (1 Satz) generieren, prüfen
5. **Iterieren:** Wenn falsch → Style nachschärfen, NICHT Text
6. **Final Render**
7. **Lieferung:** `MEDIA:<pfad>.mp3` + optional `[[audio_as_voice]]`

## Fallstricke

- ⚠️ Eckige Klammern `[...]` werden bei ElevenLabs oft gesprochen
- ⚠️ Großschreibung verändert manchmal Aussprache
- ⚠️ Abkürzungen ausschreiben (z.B. → "zum Beispiel"), oder per say-as
- ⚠️ Zahlen: bei kritischen Texten ausschreiben ("zweitausendsechsundzwanzig")
- ⚠️ Sprache vom Voice-Model muss zur Text-Sprache passen
- ⚠️ Lange Texte: in <1000-Zeichen-Blöcken senden (Provider-Limit)

## Lieferung

- `MEDIA:<pfad>.mp3` auf eigener Zeile
- Bei Voice-Note-Kontext: `[[audio_as_voice]]` Hint
- Bei Multi-File: jeweils eigene MEDIA-Zeile
