Zum Inhalt
lern-es.jetztby twisted pair
Rechner
Weg
Agent

FigurBeispiel (l3hr3r) ✎ eigene beschreiben

Eine Stimme entwerfen

Aus einer Beschreibung werden acht Stimmen, die es nicht gibt. Eine davon wählst du – und ab dann spricht sie jeden Text.

Das bekommst du

Eine eigene Stimme, die jeden deutschen Text spricht.

So legst du los

VorherKursordner aus A0 mit figur.json (Stimme beschrieben). Gesicht und LoRA brauchst du für diesen Schritt nicht.

In Claude Code eingebenIn Hermes mit lokalem Qwen eingeben

Lektion A5: Entwirf mit Qwen3-TTS VoiceDesign acht Stimmen nach figur/stimme/entwuerfe/: A deep, low-pitched male voice of a man in his early thirties, slightly husky and raspy, warm, calm and charismatic. Clear standard German pronunciation with a very slight northern German tone, no dialect. Relaxed, natural pace, like an engaging teacher explaining something to a class.. Miss bei jeder die Tonhöhe und leg mir alle acht zum Anhören hin.

Im Terminal, im Kursordner

python3 skripte/einrichten/tts.py -v
python3 skripte/stimme_entwerfen.py -v
cat figur/stimme/entwuerfe/tonhoehe.txt
mpv figur/stimme/entwuerfe/stimme_*.wav

# Deine Wahl übernehmen (hier Stimme 7) und festhalten
cp figur/stimme/entwuerfe/stimme_7.wav figur/stimme/referenz.wav
cp figur/stimme/entwuerfe/text.txt figur/stimme/referenz.txt
echo "| A5 | $(date +%F) | Stimme 7 | … |" >> entscheidungen.md

# Probe: dein Text in der neuen Stimme, mit 1 s Stille vorn und hinten
python3 skripte/sprechen.py "Deine Figur. Deine Stimme. Dein Text. In sieben Schritten zum ersten Clip, auf deinem Rechner. Mit einem KI-Agenten oder von Hand: Du triffst die Entscheidungen." --aus clips/probe/stimme.wav
python3 skripte/pruefen.py A5

Was dabei passiert ↓

Ziel
Eine eigene, synthetische Stimme der Figur als Referenzaufnahme, mit der jeder deutsche Text gesprochen werden kann.
Rechenzeit
Minuten statt Stunden – acht Entwürfe, danach wenige Sekunden je Satz
Hardware
1 × NVIDIA RTX 3090 (24 GB); das Sprachmodell braucht nur einen Bruchteil davon
Software
Qwen3-TTS 1.7B VoiceDesign und Base (Apache 2.0) · librosa (Tonhöhe) · faster-whisper (Mitschrift, CPU) · ffmpeg
Daten rein
Die Stimmbeschreibung aus figur.json
Daten raus
8 Entwürfe mit Tonhöhe, eine gewählte Referenz (figur/stimme/referenz.wav + referenz.txt), Sprechtests mit Mitschrift
Skill
avatar-stimme – in Vorbereitung

▸ Video

Folgt. Geplant sind 6 Minuten, mit Hörproben der Entwürfe.

VideoEr erklärt diese Lektion selbst. Präsentiert von der Figur, um die es geht.

Worum es geht

Die Figur braucht eine Stimme, die immer gleich klingt – in jedem Clip, bei jedem Text. Eine echte Stimme zu klonen kommt nicht infrage: Die Figur ist erfunden, ihre Stimme soll es auch sein.

Das gelingt mit zwei Modellen der Familie Qwen3-TTS. Das erste, VoiceDesign, erfindet eine Stimme aus einer Beschreibung wie „warm, ruhig, Anfang 30, leicht norddeutsch“. Davon entstehen mehrere Entwürfe; einen wählst du als Referenz. Das zweite, Base, nimmt diese Referenz und spricht damit jeden neuen Text. So bleibt die Stimme gleich, egal was die Figur sagt.

Was vorher passiert ist

Nur Lektion A0: Im Kursordner liegt figur.json, darin unter stimme die Beschreibung. Gesicht und LoRA sind für diesen Schritt egal – die Stimme kannst du auch parallel zu A1 bis A4 entwerfen.

Der Ablauf

1. Einrichten

Qwen3-TTS bekommt eine eigene Python-Umgebung in werkzeuge/tts/, die Modelle landen in modelle/: VoiceDesign und Base mit je rund 4,3 GB, dazu ein kleines Whisper-Modell für die Mitschrift.

2. Acht Entwürfe

Alle acht Entwürfe sprechen denselben Text und bekommen dieselbe Beschreibung. Sie unterscheiden sich nur im Seed – jeder Seed ergibt eine andere, aber reproduzierbare Stimme. Die Beschreibung schreibst du am besten auf Englisch: So stehen die Beispiele in der Modellkarte, und so lief es bei mir. Die Stimme selbst spricht trotzdem Deutsch.

A deep, low-pitched male voice in the bass-baritone range, of a man in his early thirties.
The voice has a husky, slightly raspy texture and sits low and resonant in the chest.
Warm, calm and charismatic. Clear standard German pronunciation with a very slight
northern German tone, no dialect. Relaxed, natural pace, like an engaging teacher.

3. Tonhöhe messen

Ob eine Stimme „tief“ ist, hört man nicht immer sicher – vor allem nicht nach dem achten Entwurf. Ein kleines Werkzeug misst darum die mittlere Tonhöhe jedes Entwurfs. Für die Beschreibung oben ergab das:

Entwurf Tonhöhe
stimme_3 93 Hz
stimme_6 106 Hz
stimme_7 128 Hz
stimme_5 135 Hz
stimme_8 153 Hz
stimme_1 173 Hz
stimme_4 182 Hz
stimme_2 223 Hz

Gleiche Beschreibung, acht Seeds – und eine Spanne von 93 bis 223 Hz. Zum Vergleich: Männerstimmen liegen grob bei 85 bis 180 Hz.

HörprobeEntwurf 3, der tiefste (93 Hz). KI-generiert.
HörprobeEntwurf 7, die gewählte Stimme (128 Hz). KI-generiert.
HörprobeEntwurf 2, der höchste (223 Hz) – bei derselben Beschreibung. KI-generiert.

4. Wählen und übernehmen

Die Messung sortiert vor, entschieden wird mit dem Ohr. Gewählt habe ich Entwurf 7 – nicht den tiefsten. Die Wahl wird zur Referenz: die Aufnahme als figur/stimme/referenz.wav, der gesprochene Text als referenz.txt. Beides braucht das Base-Modell, um die Stimme zu klonen.

5. Sprechen und prüfen

Ab jetzt spricht die Figur jeden Text in dieser Stimme. Das Skript sprechen.py hängt vorn und hinten je eine Sekunde Stille an und schreibt zum Schluss mit, was gesprochen wurde. So siehst du sofort, ob ein Wort verschluckt oder falsch betont wurde. Beim Satz für die Startseite dieser Webseite kam heraus: „Deine Figur, deine Stimme, dein Text, in sieben Schritten zum ersten Clip auf deinem Rechner mit einem KI-Agenten oder von Hand, du triffst die Entscheidungen.“ – wortgetreu, 9,6 Sekunden plus Stille.

Von Hand: der ganze Weg

Drei Skripte aus dem Kit erledigen die Schritte, die Wahl und das Übernehmen machst du selbst. Mit -v gibt jedes Skript vor dem Ausführen aus, welche Befehle es aufruft; danach liegt ein Protokoll (protokoll_stimme_entwerfen.sh, protokoll_sprechen.sh) im Ergebnisordner, das du lesen oder erneut ausführen kannst. Mit --zeigen siehst du die Befehle, ohne dass etwas passiert.

Im Terminal, im Kursordner

# 1. Einrichten: Umgebung werkzeuge/tts, Modelle nach modelle/ (rund 9 GB)
python3 skripte/einrichten/tts.py -v

# 2. Acht Entwürfe aus der Stimmbeschreibung in figur.json, mit Tonhöhe
python3 skripte/stimme_entwerfen.py -v
cat figur/stimme/entwuerfe/tonhoehe.txt

# 3. Anhören (mpv oder ein anderer Player)
mpv figur/stimme/entwuerfe/stimme_*.wav

# 4. Wahl übernehmen (hier Entwurf 7) und festhalten
cp figur/stimme/entwuerfe/stimme_7.wav figur/stimme/referenz.wav
cp figur/stimme/entwuerfe/text.txt figur/stimme/referenz.txt
echo "| A5 | $(date +%F) | Stimme 7 | warm, ruhig, nicht zu tief |" >> entscheidungen.md

# 5. Probe: einen Satz sprechen, mit 1 s Stille vorn und hinten und Mitschrift
python3 skripte/sprechen.py "Deine Figur. Deine Stimme. Dein Text. In sieben Schritten zum ersten Clip, auf deinem Rechner. Mit einem KI-Agenten oder von Hand: Du triffst die Entscheidungen." --aus clips/probe/stimme.wav -v
python3 skripte/pruefen.py A5

Was -v bei Schritt 2 ausgibt – die Befehle, die das Skript tatsächlich aufruft:

Im Terminal, im Kursordner

python3 skripte/werkzeuge/comfy.py frei
cat > figur/stimme/entwuerfe/text.txt <<'EOF'
Hallo zusammen! Heute schauen wir uns an, warum es eigentlich regnet. …
EOF
werkzeuge/tts/venv/bin/python skripte/werkzeuge/tts_entwerfen.py --beschreibung 'A deep, low-pitched male voice of a man in his early thirties, slightly husky and raspy, warm, calm and charismatic. Clear standard German pronunciation with a very slight northern German tone, no dialect. Relaxed, natural pace, like an engaging teacher explaining something to a class.' --text 'Hallo zusammen! …' --seeds 1 2 3 4 5 6 7 8 --ordner figur/stimme/entwuerfe
werkzeuge/tts/venv/bin/python skripte/werkzeuge/tonhoehe.py figur/stimme/entwuerfe/stimme_1.wav … figur/stimme/entwuerfe/stimme_8.wav --aus figur/stimme/entwuerfe/tonhoehe.txt

Der erste Befehl gibt Grafikspeicher frei, falls ComfyUI aus einer früheren Lektion noch Modelle hält; läuft ComfyUI nicht, scheitert er harmlos. Der Grund in der Entscheidungszeile ist deiner.

Entscheidungen

Eine echte Stimme klonen oder eine erfinden?

Erfinden – aus einer Beschreibung

Die Figur ist erfunden, ihre Stimme auch. Eine echte Stimme zu klonen bräuchte die Einwilligung der Person und wäre ein Deepfake im Sinne des EU AI Act. VoiceDesign erzeugt eine Stimme, die es nicht gibt.

Wie viele Entwürfe?

Acht, je mit festem Seed

Die Streuung ist groß: Dieselbe Beschreibung ergab 93 bis 223 Hz. Bei vier Entwürfen kann die passende Stimme schlicht fehlen. Feste Seeds machen jeden Entwurf reproduzierbar.

Welcher Entwurf?

Entwurf 7 mit 128 Hz – nicht der tiefste

Die Messung hilft beim Vorsortieren, wenn „tief“ gewünscht ist. Gewählt wird mit dem Ohr: Klang, Wärme, Natürlichkeit. Die Wahl steht in entscheidungen.md.

Für jeden Text neu entwerfen?

Nein: einmal entwerfen, dann klonen

VoiceDesign erfindet bei jedem Aufruf neu – mit anderem Text klingt auch derselbe Seed nicht garantiert gleich. Die Base-Variante klont dagegen die gewählte Referenz. So bleibt die Stimme über alle Clips dieselbe.

Stille vor und nach dem Text?

Je 1 Sekunde

Das Videomodell in A6 erzeugt so viele Bilder, wie die Tonspur lang ist. Mit Stille hat die Figur Zeit, ruhig anzufangen und ruhig aufzuhören, statt mitten in der Bewegung zu beginnen oder abzubrechen.

Fallstricke

„Tief und rau“ ergibt nicht unbedingt eine tiefe Stimme

Wörter wie „rau“ oder „kratzig“ setzt das Modell oft mit einer höheren Stimme um. Bei meiner ersten Runde mit „warm, ruhig, mittlere Tonlage“ lagen alle Entwürfe zwischen 115 und 148 Hz; die Bitte um mehr Tiefe brachte erst mit acht Seeds die Auswahl.

LösungMehrere Seeds erzeugen und die Tonhöhe messen.

Abkürzungen werden falsch gesprochen

Das Modell liest „KI“ eher als Wort. Für die Stimme steht im Text „Ka-I-Agenten“, auf der Webseite bleibt „KI“. Die Mitschrift erkannte trotzdem „KI-Agenten“ – ein gutes Zeichen, dass es richtig klang.

LösungIm gesprochenen Text lautschriftlich schreiben, z. B. „Ka-I“ statt „KI“.

Der Clip beginnt oder endet abgehackt

Ohne Stille setzt die Stimme im ersten Bild ein und endet im letzten. Im Video sieht das aus, als sei es angeschnitten.

Lösungsprechen.py hängt je 1 s Stille an (--stille 1.0).

Die Mitschrift bricht mit einem Fehler in PyAV ab

Der eigene Decoder von faster-whisper verträgt sich nicht mit jeder Version von PyAV („unexpected keyword argument ‘metadata_errors’“). Wer das Werkzeug selbst baut, umgeht ihn so.

LösungAudio vorher mit librosa auf 16 kHz laden – so macht es mitschrift.py.

Kein Grafikspeicher für das Sprachmodell

ComfyUI behält Modelle aus früheren Lektionen im Speicher – bei mir über 20 GB. Die Skripte geben ihn zu Beginn frei.

LösungVorher ComfyUI entladen: python3 skripte/werkzeuge/comfy.py frei.

Mit KI vereinfacht

Der Agent richtet die Umgebung ein, erzeugt die Entwürfe, misst die Tonhöhe und legt dir alles zum Anhören hin. Das Anhören und die Wahl bleiben bei dir – dafür gibt es kein Maß, das dein Ohr ersetzt.

Der Agent

  • richtet Qwen3-TTS und die Modelle ein
  • erzeugt acht Entwürfe aus deiner Beschreibung
  • misst die Tonhöhe und sortiert
  • übernimmt die Wahl als Referenz und trägt sie ein
  • spricht Probesätze und prüft sie per Mitschrift

Du

  • beschreibst, wie die Stimme klingen soll
  • hörst die Entwürfe an und wählst

Mit dem Skill avatar-stimme reicht ein Satz; die Beschreibung liest der Agent aus figur.json:

Entwirf acht Stimmen für meine Figur, miss die Tonhöhe
und leg sie mir zum Anhören hin.

Der Skill ist in Vorbereitung und erscheint mit dem Video zu dieser Lektion.

Mit lokalem Qwen: Das Sprachmodell des Agenten und Qwen3-TTS teilen sich die Grafikkarte. Mit OLLAMA_KEEP_ALIVE=0 aus der Einrichtung ist der Agent nach jeder Antwort entladen; Qwen3-TTS braucht ohnehin nur einen kleinen Teil der 24 GB.