Text to Speech unter Windows

Hallo,

es wurden ja schon einige Möglichkeiten, wie man mit den Bordmitteln der verschiedenen Betriebssystem-Welten (Windows, Linus, Mac) aus Texten MP3s erstellen kann.

Leider klingen die BS-eigenen Stimmen nicht so gut, wie einige Online-Services wie von Google, oder auch kostenlose, über Werbung finanzierte Web-Services.

Google hat aber den Nachteil, dass man sich dort registrieren muss, was - auch wenn kostenlos - nicht jeder machen will.

Kostenlose Web-Services wie http://notevibes.com/de/ bieten ebenfalls sehr natürlich klingende Stimmen und müssen sich vom Klang her nicht hinter dem Google-Service verstecken. Außerdem erfordern sie keine Registrierung, haben aber den großen Nachteil, dass man jeden Text einzeln auf der Website eintragen und die generierte MP3-Datei manuell herunterladen muss.

Und wenn man sich diese Mühe macht, darf man die MP3s noch nicht einmal mit anderen teilen, da dies in den Nutzungsbedingungen (für die kostenlose Nutzung ohne Registrierung) ausgeschlossen ist. MP3s darf man ohne eine kostenpflichtige Lizenz nur für die eigene persönliche Verwendung herunterladen. Es müsste demnach also jeder die von ihm genutzten MP3-Dateien selbst erstellen.

So ähnlich gilt das auch für andere Online-Text-to-Speech-Services.

Um sich die viele Arbeit beim manuellen Aufrufen eines solchen Online-Services zu sparen, kann man diesen Vorgang aber auch automatisieren. Ich möchte anhand eines kleinen Python-Scriptes zeigen, wie man (am Beispiel von notevibes.com) das machen könnte:

import requests
import urllib
import comtypes.client

def text2mp3(textstring,filename):
    req = requests.post("https://notevibes.com/de/", data={'time': '_tonuino', 'content': textstring, 'speed': 1 , 'pitch': 0 , 'voice': 'de-DE-Wavenet-B'})
    if(req.status_code != 200):
        print(req.status_code, req.reason)
        return
    txt = req.text
    start = txt.find('https://storage.googleapis.com/audiog')
    end = txt.find('.mp3',start) + 4
    link = txt[start:end]
    urllib.urlretrieve (link, filename)

Die Funktion besteht im Grunde aus zwei Teilen: Zunächst wird die Website mit den gewünschten Parametern per POST-request aufgerufen. Als Antwort erhält man eine neue Website, deren Beschreibung im String txt abgelegt wird. Aus dieser Beschreibung wird im zweiten Schritt der Dateiname der generierten MP3-Datei herausgesucht und die Datei heruntergeladen.

Die Programmiersprache Python hat gegenüber betriebssystemspezifischen Scriptsprachen den Vorteil, dass sie auf jedem Betriebssystem läuft, aber man könnte dasselbe auch ähnlich z.B. mit der Windows Powershell oder einem Linux-Shell-Script umsetzen.

Das Python-Script lässt sich unter Python einfach mit zwei Strings als Parametern, nämlich dem zu sprechenden Text und dem gewünschten Dateinamen aufrufen. Das Aufrufscript (ebenfalls in Python) könnte dann in etwa so beginnen:

for i in range(1,255):
    text = str(i)
    text2mp3(text, text.zfill(4) + '.mp3')
 
text2mp3("Oh, eine neue Karte! Verwende die Lautstärke Tasten um einen Ordner für die Karte auszuwählen. Drücke die Pause Taste um die Auswahl zu speichern.", \
  '0300_new_tag.mp3')

...

Auf notevibes gibt es vier verschiedene deutsche Sprachen. Je nach gewünschter Sprache müsste im Script der Parameter ‚voice‘ angepasst werden. Dies sind die gültigen Einträge:

  • Anika: de-DE-Wavenet-A
  • Markus: de-DE-Wavenet-B
  • Arabella: de-DE-Wavenet-C
  • Gust: de-DE-Wavenet-D

Außerdem kann man noch mit dem Parameter speed die Sprachgeschwindigkeit (gültige Werte: 0.2, 0.4, 0.6, 0.8, 1, 1.25, 1.5, 1.75, 2) und mit dem Parameter pitch die Tonhöne (gültige Werte: -20, -15, -10, -5, 0, 5, 10, 15, 20) einstellen. Der Parameter time wird lediglich an den Dateinamen der von notevibes generierten MP3-Datei angehängt und muss kein Zeitstring sein. Er dient lediglich dazu, von mehreren Nutzern erstellte MP3s auf dem Server zu unterscheiden. Da im Falle des Scripts jede Datei unmittelbar nach dem Erstellen heruntergeladen wird, dürfte es hier keine Konflikte geben.

Viel Spaß beim Ausprobieren!

3 „Gefällt mir“