Kontrolle von Prosodie und Sprechgeschwindigkeit
Auf dieser Seite
Aktualisiert am 2. November 2026 — Audio-Modelle. Mehrere Modelle in diesem Kurs werden eingestellt:
tts-1,tts-1-hdundgpt-4o-mini-ttswerden am 6. Januar 2027 nicht mehr funktionieren (Nachfolger:gpt-realtime-2.1-mini, der laut OpenAI TTS-Anleitung nicht durch/v1/audio/speechunterstützt wird: Die Migration der Sprachsynthese erfolgt über die Realtime API);gpt-realtime,gpt-4o-realtimeund Legacy-Audio-Modelle am 20. Januar 2027 (gpt-realtime-2.1,gpt-realtime-2.1-mini,gpt-audio-1.5);whisper-1,gpt-4o-transcribeund/v1/audio/translationsam 26. Februar 2027 (gpt-transcribe,gpt-live-transcribe,v1/realtime/translations). Für die Voll-Duplex-Stimme ist GPT-Live 1 seit dem 10. September 2026 in der API verfügbar. Lektion abgeschlossen am 3. November 2026: Sie enthielt zuvor keine Sprachanweisungen fürgpt-4o-mini-tts(instructions), den direktesten Hebel für Intonation, Tonfall und Sprechgeschwindigkeit, die in der Dokumentation beschrieben werden und dietts-1nicht akzeptiert. Quelle: Text-to-Speech.
Kontrolle von Prosodie und Sprechgeschwindigkeit
Prosodie – Intonation, Rhythmus, Betonung und Pausen – unterscheidet eine roboterhafte synthetische Stimme von einer natürlichen. Die TTS-API von OpenAI unterstützt SSML nicht, bietet aber zwei direkte Hebel: den Parameter instructions für gpt-4o-mini-tts und den Parameter speed, ergänzt durch Techniken zur Textformatierung.
Sprachanweisungen für gpt-4o-mini-tts
Bei gpt-4o-mini-tts beschreiben Sie in natürlicher Sprache, wie gesprochen werden soll, unter Verwendung des Parameters instructions. Die Dokumentation listet auf, was diese Anweisungen steuern: Akzent, emotionale Bandbreite, Intonation, Nachahmungen, Sprechgeschwindigkeit, Tonfall und Flüstern.
from openai import OpenAI
client = OpenAI()
with client.audio.speech.with_streaming_response.create(
model="gpt-4o-mini-tts",
voice="marin",
input="Ihr Termin ist für morgen um 14 Uhr bestätigt.",
instructions=(
"Beruhigende und versöhnliche Stimme einer medizinischen Rezeptionistin. "
"Gemessener Takt, kurze Pause vor der Uhrzeit, fallende Intonation am Satzende."
),
) as response:
response.stream_to_file("appointment.mp3")
Halten Sie den zu sprechenden Text im Parameter input und den Lieferstil im Parameter instructions getrennt. Mischen Sie diese nicht, sonst besteht die Gefahr, dass die Anweisung selbst laut vorgelesen wird. Diese Anweisungen funktionieren nicht mit tts-1 oder tts-1-hd; bei diesen Modellen wirken nur speed und Textformatierung, die weiter unten besprochen werden, auf die Ausgabe. Da alle drei Modelle am 6. Januar 2027 eingestellt werden, folgt die Migration zur Realtime API (Lektion 10) diesem gleichen Prinzip: Tonanweisungen wandern in Sitzungs- oder Antwortanweisungen über.
Kontrolle der Sprechgeschwindigkeit mit dem Speed-Parameter
Die TTS-API bietet einen speed-Parameter zur Anpassung der Sprechgeschwindigkeit:
from openai import OpenAI
client = OpenAI()
# Normale Geschwindigkeit (1.0)
response_normal = client.audio.speech.create(
model="tts-1",
voice="nova",
input="Ihr Termin ist für morgen um 14 Uhr bestätigt.",
speed=1.0
)
# Langsamer (0.75) — für komplexe Anweisungen
response_slow = client.audio.speech.create(
model="tts-1",
voice="nova",
input="Ihr Termin ist für morgen um 14 Uhr bestätigt.",
speed=0.75
)
# Schneller (1.25) — für kurze Benachrichtigungen
response_fast = client.audio.speech.create(
model="tts-1",
voice="nova",
input="Ihr Termin ist für morgen um 14 Uhr bestätigt.",
speed=1.25
)
| Geschwindigkeit | Bereich | Einsatzgebiet |
|---|---|---|
| Langsam | 0,25 — 0,75 | Komplexe Anweisungen, Barrierefreiheit, ältere Nutzer |
| Normal | 0,9 — 1,1 | Gespräche, Schulungen, Erzählungen |
| Schnell | 1,25 — 2,0 | Benachrichtigungen, Bestätigungen, Zusammenfassungen |
Techniken zur Textformatierung
Der primäre Hebel zur Kontrolle der Prosodie ist die Formatierung des Eingabetextes. Das TTS-Modell interpretiert Satzzeichen und Struktur, um seine Geschwindigkeit und Intonation anzupassen.
Pausen
# Kurze Pause: Komma
text_comma = "Erster Schritt, prüfen Sie Ihre Konfiguration."
# Mittlere Pause: Semikolon oder Gedankenstrich
text_semi = "Erster Schritt — prüfen Sie Ihre Konfiguration."
# Lange Pause: Punkt oder Ellipse
text_dots = "Erster Schritt. Prüfen Sie Ihre Konfiguration."
text_ellipsis = "Erster Schritt... prüfen Sie Ihre Konfiguration."
# Sehr lange Pause: getrennter Absatz
text_para = "Erster Schritt.\n\nPrüfen Sie Ihre Konfiguration."
Betonung und Intonation
# Frage (steigende Intonation)
text_question = "Möchten Sie diese Reservierung bestätigen?"
# Ausruf (natürliche Betonung)
text_exclaim = "Glückwunsch! Ihre Registrierung ist bestätigt!"
# Betonung durch Großschreibung
text_caps = "Es ist SEHR wichtig, diesen Schritt nicht zu überspringen."
# Liste mit Rhythmus (das Modell markiert jedes Element natürlich)
text_list = "Sie benötigen: eins, Ihren Benutzernamen. Zwei, Ihr Passwort. Drei, Ihren Bestätigungscode."
Anpassen von Text für den Sprachkontext
Text, der zum Lesen geschrieben wurde, und Text, der zum Sprechen geschrieben wurde, unterscheiden sich sehr stark. Für einen Sprachagenten müssen Inhalte systematisch neu formatiert werden:
def format_for_speech(text: str) -> str:
"""Passt geschriebenen Text für eine natürliche Wiedergabe durch die Stimme an."""
import re
# Häufige Abkürzungen buchstabieren
abbreviations = {
"API": "A P I",
"URL": "U R L",
"PDF": "P D F",
"SMS": "S M S",
}
for abbr, spelled in abbreviations.items():
text = text.replace(abbr, spelled)
# Kleine Zahlen als Wörter schreiben
number_words = {
"1": "eins", "2": "zwei", "3": "drei", "4": "vier",
"5": "fünf", "6": "sechs", "7": "sieben", "8": "acht",
"9": "neun", "10": "zehn"
}
for digit, word in number_words.items():
text = re.sub(rf'\b{digit}\b', word, text)
# Zeiten im gesprochenen Format schreiben
text = re.sub(r'(\d{1,2})h(\d{2})', r'\1 Stunden \2', text)
text = re.sub(r'(\d{1,2})h\b', r'\1 Stunden', text)
return text
original = "Ihr Termin ist um 14h30. Senden Sie 1 SMS zur Bestätigung."
formatted = format_for_speech(original)
# → "Ihr Termin ist um 14 Stunden 30. Senden Sie eine S M S zur Bestätigung."
Adaptive Geschwindigkeit basierend auf Inhalt
Ein intelligenter Sprachagent passt seine Sprechgeschwindigkeit an den Inhaltstyp an:
def adaptive_speed(content_type: str, user_preference: float = 1.0) -> float:
"""Berechnet optimale Geschwindigkeit basierend auf Inhaltstyp."""
base_speeds = {
"greeting": 1.0,
"instructions": 0.85,
"confirmation": 1.1,
"error_message": 0.9,
"phone_number": 0.7,
"address": 0.75,
"summary": 1.15,
"farewell": 1.0,
}
base = base_speeds.get(content_type, 1.0)
# Anpassung mit Benutzerpräferenz (0,5 bis 1,5)
adjusted = base * user_preference
return max(0.25, min(4.0, adjusted)) # Auf API-Grenzen begrenzen
# Nutzung
speed = adaptive_speed("phone_number", user_preference=0.9)
# → 0,63 (langsam für das Diktieren einer Nummer)
Audio-Post-Processing
Für eine noch feinere Kontrolle wird das Audio nach der Generierung verarbeitet:
from pydub import AudioSegment
def post_process_speech(audio_bytes: bytes, adjustments: dict) -> bytes:
"""Audio-Post-Processing für feine Anpassungen."""
import io
audio = AudioSegment.from_mp3(io.BytesIO(audio_bytes))
# Lautstärke anpassen
if "volume_db" in adjustments:
audio = audio + adjustments["volume_db"]
# Ein- und Ausblenden hinzufügen
if adjustments.get("fade_in_ms"):
audio = audio.fade_in(adjustments["fade_in_ms"])
if adjustments.get("fade_out_ms"):
audio = audio.fade_out(adjustments["fade_out_ms"])
# Stille am Anfang hinzufügen (Pre-Roll)
if adjustments.get("pre_silence_ms"):
silence = AudioSegment.silent(duration=adjustments["pre_silence_ms"])
audio = silence + audio
buffer = io.BytesIO()
audio.export(buffer, format="mp3")
return buffer.getvalue()
Kernaussagen
- Mit
gpt-4o-mini-ttsbeschreibtinstructions, wie gesprochen werden soll (Tonfall, Intonation, Geschwindigkeit, Akzent);tts-1undtts-1-hdakzeptieren diesen Parameter nicht - Der Parameter
speed(0,25 bis 4,0) steuert die gesamte Sprechgeschwindigkeit - Satzzeichen sind der primäre Hebel für Pausen: Komma (kurz), Punkt (lang), Ellipse (dramatisch)
- Text für den Sprachkontext anpassen: Abkürzungen buchstabieren, Zahlen als Wörter schreiben, Zeiten umformulieren
- Geschwindigkeit nach Inhalt variieren: langsam für Zahlen und Adressen, schnell für Bestätigungen
- Audio-Post-Processing (Lautstärke, Blenden, Stille) verfeinert die finale Ausgabe