Die inoffizielle Google Text-To-Speech API

gtts

Dass Google auf translate.google.com die Möglichkeit bietet, einen Eingegebenen Text vorzulesen (TTS = Text-To-Speech), ist ja nichts neues. Das Besondere jedoch sind die Möglichkeiten die sich durch diese Funktion ergeben.
 
Die Daten zur Audio-Ausgabe werden nämlich über eine einfache HTTP GET (REST) anfrage angefordert:
 
http://translate.google.com/translate_tts?tl=de&q=text
 
 
Durch diese Anfrage, die eine MP3-Datei zurück liefert, lassen sich einfache TTS-Anwendungen realisieren und dank der Mehrsprachigkeit von Googles Service funktioniert diese Methode auch für viele andere Sprachen. Der einzige Nachteil den diese Methode mit sich bringt ist eine Limitierung von Googles Seiten, die es maximal erlaubt 100 Zeichen mit einer Anfrage zu realisieren.
 
Die wichtigsten URL-Parameter sind in diesem Fall die zwei für die gewählte Sprache und der zu sprechende Text:

    tl= <-Sprachkürzel->
    q= <-Text->

 
In ActionScript3 würde der dazu entsprechende Code folgendermaßen aussehen:
 

  1. var sayWhat:String = „Hallo, wie geht es dir? „;
  2. var lang:String = „de“;
  3. // sayWhat = „Hello, how are you?“;
  4. // lang = „en“;
  5. var req:URLRequest= new URLRequest(„http://translate.google.com/translate_tts?tl=“ + lang + „&q=“ + encodeURI(sayWhat))
  6. var snd:Sound = new Sound(req);
  7. if (sayWhat.length > 100){
  8. throw new Error(„Only phrases < 100 charakters are supported.");
  9. } else {
  10. snd.play();
  11. }

 
Ein URLRequest fordert die generierte MP3-Datei an, welche wie in AS3 üblich, entgegengenommen und abgespielt wird.
Für einen praktischen Einsatz müsste der Code natürlich noch Umlaute in „ae, ue, oe“ umwandeln, da Googles TTS-Service diese nicht erkennt, sowie Sätze, die 100 oder mehr Zeichen haben, in kleinere Teilstücke unterteilen die nacheinander Gesendet und abgespielt werden.
 
Bei meinem Test mit der Funktion bemerkte ich, dass Google eine Latenz zwischen 600ms und 1,5 sekunden hatte. Dadurch traten bei Sätzen, die auf zwei Anfragen aufgeteilt waren, längere Pause zwischen den einzelnen Wörtern auf. Jedoch behob die Optimierung des Codes, die Sätze bereits während dem Abspielen des vorherigen nachzuladen, dieses Problem.
 
Demo-App folgt…
 
 
 

12 Gedanken zu „Die inoffizielle Google Text-To-Speech API

  1. ==Für einen praktischen Einsatz müsste der Code natürlich noch Umlaute in “ae, ue, oe” umwandeln, da Googles TTS-Service diese nicht erkennt==

    Wenn es für Sie immer noch interessant wäre…
    1. Ich habe mit dem kyrillischen Zeichensatz und Russisch experimentiert (tl=ru). Man benötigt dann unbedingt das paramater ie=UTF-8, dann wird der Text erkannt. Ich glaube, für die deutschen Sonderzeichen gilt dasselber.
    2. Ich musste das einfache php-Proxy nutzen, sonst ging es nicht. Was User-Agent beinhalten muss und welche Header noch wichtig sind, weiß ich im Moment nicht und wollte eigentlich Sie fragen :).

    Ach ja, ich habe mit AIR experimentiert.

  2. Hey,
    I’d just like you to know, special chars like ä, ö and ü actually are supported now.

    Does anybody know about alternate voices? ^^
    The standard german one sounds pretty horrible 😀

    Aiyion.

  3. Stand 01.08.2015 hat Google diesen Service eingeschränkt,
    Anfragen können nur noch über den Browser gestellt werden wenn ein Captcha‘ beantwortet wird.
    Somit ist eine KommandozeilenAbfrage in einer Batch leider nicht mehr möglich. Schade.

    Bitte Posten wenn jemand eine Lösung hat.

    Gruß
    Reinhard

  4. Funktioniert leider nicht!

    Google antwortet mit HTML Code, der unter anderem beinhaltet:

    „To continue, please type the characters below:“

    Vermutlich hat Google irgendwann festgestellt, dass der Request automatisiert durchgeführt wird und unterbindet dies nun durch Captcha-Code.

    Kennt jemand Alternativen, oder einen Trick?

    @Aiyion.Prime
    The german Sound „Steffi“ is even worse.

Schreibe einen Kommentar