Roboter mit Sprechblase

Text-to-Speech mit der OpenAI API und Python

()

Im April dieses Jahres hatte ich bereits ChatGPT als Podcast-Gast zum Thema New Learning . Nun stehe ich vor der Veröffentlichung einer neuen Podcastfolge mit ChatGPT zum Thema Microlearning und war auf der Suchte nach einer kostengünstigen Text-to-Speech-Lösung.

API von OpenAI Text-to-Speech

Obwohl es einige sicher gute kostenpflichtige Optionen wie Elevenlabs oder Murf gibt, wollte ich für eine einzelne Podcastfolge kein Abo abschließen und verschiedene Lösungen ausprobieren. Glücklicherweise stieß ich in der neuesten OpenAI API Version auf die Text-to-Speech-Option. Sicherlich sind andere Angebote dieser Variante überlegen, aber für den angedachten Zweck reichte es mir aus. Dazu kommt noch, dass die OpenAI API die Kosten verbrauchsabhängig berechnet. Meine Schätzung liegt bei weniger als 10 Cent für 3 Minuten Audio.

Erfahrungen mit der OpenAI API

Nach einem ersten Check der API bemerkte ich zwar keine offensichtliche Option zum Ändern der Ausgabesprache auf Deutsch. Doch kurzerhand entschied ich mich, einfach einen deutschen Text zu verwenden und testweise eine Sprachausgabe aus einem meiner Podcast-Shownotes zu generieren. Überraschend funktionierte es auf Anhieb einwandfrei. Die Engine erkannte automatisch die Sprache und wandelte den deutschen Text problemlos in gesprochene Sprache um.

Die Stimmen: Eine Auswahlmöglichkeit

Die API bietet sechs verschiedene Stimmen. Um die Stimmen zu vergleichen, ließ ich einen Test-Satz von jeder Stimme generieren. Für mein nächstes ChatGPT Podcast-Projekt benötigte ich zwei Stimmen, die sich deutlich voneinander unterscheiden. Einige Stimmen klangen einfach zu ähnlich. Hier die verschiedenen Stimmen, damit ihr euch selbst einen Eindruck davon machen könnt:

Stimme: Alloy
Stimme: Echo
Stimme: Fable
Stimme: Nova
Stimme: Onyx
Stimme: Shimmer

Audios

Praktische Anwendung: Beispiel-Code

Eine Herausforderung besteht natürlich bei einer API darin, dass man ein wenig Programmierkenntnisse benötigt. Aber dank ChatGPT wird programmieren ja auch für Ungeübte immer einfacher. Um euch einen Eindruck davon zu verschaffen, teile ich hier einen Beispiel-Code, mit dem ihr Text in Sprache umwandeln könnt. Beachtet jedoch, dass ihr zunächst ein API-Key benötigt.

from pathlib import Path
from openai import OpenAI

client = OpenAI()

fname = f'Text_to_speech.mp3'
# Possible voices = ['alloy', 'echo', 'fable', 'onyx', 'nova', 'shimmer']

response = client.audio.speech.create(
    model="tts-1",
    voice="alloy",
    input="Das digitale Zeitalter hat längst Einzug in unsere Unternehmen gehalten, und der Mittelstand bildet dabei keine Ausnahme.",
    speed=1.0
)
response.stream_to_file(fname)

Mehrere Audiodateien auf einmal erstellen

Für die effiziente Erstellung mehrerer Audiodateien für eine Podcastfolge habe ich ein minimal längeres Programm geschrieben. Dieses erstellt für alle .txt-Dateien in einem Ordner entsprechende Audio-Dateien. Wer den Code genauer verstehen möchte kann sich diesen übrigens auch von ChatGPT erklären lassen.

from pathlib import Path
import os
from openai import OpenAI

f_folder = "C:\\temp\\Podcast" # Hier den Ordner eintragen, in dem die .txt Dateien liegen. \ im Pfad durch \\ ersetzen.

client = OpenAI()

files = sorted(os.listdir(f_folder))

def read_text_file(file_path):
    try:
        with open(file_path, 'r',encoding='utf-8') as file:
            # Lies den gesamten Inhalt der Datei in eine Variable
            file_content = file.read()
            return file_content
    except FileNotFoundError:
        print(f"Die Datei '{file_path}' wurde nicht gefunden.")
        return None
    except Exception as e:
        print(f"Ein Fehler ist aufgetreten: {e}")
        return None

def tts_make_audio (text,voice,file_path):
    response = client.audio.speech.create(
        model="tts-1",
        voice=voice,
        input=text
    )
    response.stream_to_file(file_path)

for file_name in files:
    # Check if the file starts with a number and ends with ".txt"
    if file_name[0].isdigit() and file_name.endswith(".txt"):
        new_file_name = os.path.splitext(file_name)[0] + ".mp3"
        new_file_path = os.path.join(f_folder, new_file_name)
        print ("Creating file" + new_file_path)
        speaker_text =  read_text_file(os.path.join(f_folder,file_name))
        tts_make_audio(speaker_text,'alloy',new_file_path)

Fazit

Persönlich gefällt mir die Möglichkeit, mit der OpenAI API und Python Sprachdateien schnell und einfach erstellen zu können. Sicherlich wird die auch die Qualität und die Vielfalt der angebotenen Sprachen bei OpenAI steigen, und damit auch der mögliche nutzen noch größer werden. Vermutlich gibt es schon erste Tools, die intern die API nutzen und den Zugang zu den Funktionalitäten auch ohne Programmiererfahrung ermöglichen.

Ergänzende Links und Bildquelle

  • Dokumentation von OpenAI: Text to Speech – OpenAI API
  • Beitragsbild erstellt mit https://bing.com/create / Dall-e-3. Prompt:
    Design of a stock image. A talking robot with a speech bubble in a digital modern, matrix like environment.

Wie hilfreich war dieser Beitrag?

Klicke auf die Sterne um zu bewerten!

Durchschnittliche Bewertung / 5. Anzahl Bewertungen:

Bisher keine Bewertungen! Sei der Erste, der diesen Beitrag bewertet.

Es tut uns leid, dass der Beitrag für dich nicht hilfreich war!

Lasse uns diesen Beitrag verbessern!

Wie können wir diesen Beitrag verbessern?

2 Gedanken zu „Text-to-Speech mit der OpenAI API und Python

  1. Also bei mir hat er leider egal welches Model ich verwende und wie ich meine Texte schreibe immer eine sehr breite englische Aussprache.

    1. Hi Christoph,

      ich hatte ein ähnliches Problem und meine interpretation war, dass das Model immer dann eine eher englische Aussprache nutzen, wenn in dem deutschen Text auch englischsprachige Worte vorkamen, was sich ja leider nicht vermeiden lässt. Ideal ist die Lösung noch nicht, aber ich könnte mir vorstellen, dass in neueren Versionen mehr Optionen zur Verfügung stehen werden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.