# 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()