# make_tts.py
# pip install openai==1.* (offizielles SDK)
import os
from pathlib import Path
from openai import OpenAI
# =========================
# Einstellungen
# =========================
INPUT_TXT = "rotkaeppchen.txt" # dein Märchen-Text
OUTPUT_MP3 = "rotkaeppchen.mp3" # Zieldatei
MODEL = "gpt-4o-mini-tts" # TTS-Modell
VOICE = "alloy" # Stimmenbeispiele: alloy, verse, coral, sage, serene
INSTRUCTIONS = (
"Sprich auf Deutsch in ruhigem, warmem Erzählton, "
"mit klarer Artikulation, leichten Pausen an Satzenden "
"und zarter Betonung in Dialogen."
)
# Optional: einfache Filterfunktion, um eckige Tags zu entfernen, z. B. [birds], [deep voice]
def strip_square_tags(text: str) -> str:
import re
return re.sub(r"\[[^\]]*\]", "", text)
def main():
# Hole den API-Key aus Umgebungsvariable OPENAI_API_KEY
api_key = os.getenv("OPENAI_API_KEY")
if not api_key:
raise SystemExit("Fehlender OPENAI_API_KEY (Umgebungsvariable setzen).")
# Text laden
text_path = Path(INPUT_TXT)
if not text_path.exists():
raise SystemExit(f"Textdatei nicht gefunden: {text_path.resolve()}")
text = text_path.read_text(encoding="utf-8")
# Tags entfernen (falls gewünscht)
text = strip_square_tags(text).strip()
client = OpenAI(api_key=api_key)
# Streaming-Variante: schreibt während der Generierung direkt in die MP3
out_path = Path(OUTPUT_MP3)
with client.audio.speech.with_streaming_response.create(
model=MODEL,
voice=VOICE,
input=text,
# Du kannst zusätzlich eine Sprech-Anweisung mitgeben:
instructions=INSTRUCTIONS,
# Optional: format="mp3" # (mp3 ist Standard)
) as resp:
resp.stream_to_file(out_path)
print(f"Fertig! Gespeichert: {out_path.resolve()}")
if __name__ == "__main__":
main()