web-dev-qa-db-fra.com

Comment utiliser Google Translate TTS avec la nouvelle API V2?

J'avais l'habitude d'appeler Google Translate TTS pour télécharger un fichier audio en utilisant cette URL: http://translate.google.com/translate_tts?tl=en&q=Hello+world !

Cependant, Google a changé la façon dont cela fonctionne et je ne peux donc plus télécharger les fichiers audio. Je me suis inscrit pour un essai gratuit de Google Translate API V2, mais je ne trouve pas comment obtenir les fichiers audio TTS.

Une idée?

14
lolouk44
11
Serhat Şatır
3
super_ylam

La synthèse vocale a toujours été une API "non officielle" qui est désormais protégée par captcha pour éviter les abus. Il n'a jamais été annoncé dans le cadre de l'API Translate, et il n'y a actuellement aucune fonctionnalité TTS dans l'API Translate V2, payante ou autre.

Il y a un peu plus d'informations sur ce qui suit thread de groupes qui était en cours depuis un certain temps.

3
Adam

Voici à ceux qui ont désespérément essayé de jouer à Google TTS en tant qu'audio en HTML: permettez-moi de vous faire gagner quelques heures et de vous dire comment le faire .

Disons que nous avons ce lien: https://translate.google.com/translate_tts?ie=UTF-8&client=tw-ob&tl=en&q=I+love+coffee

Si vous essayez de lire cet audio en utilisant le lien et en utilisant <audio>, <iframe>, En utilisant des bibliothèques tierces ou en le jouant avec Javascript ...

var audio = new Audio('https://translate.google.com/translate_tts...'); audio.play();

... vous découvrirez bientôt qu'aucune des méthodes susmentionnées ne fonctionne car l'erreur 404 est levée .

Solution

Apparemment, la seule façon possible de lire cet audio générique TTS est d'utiliser la balise <embed> Enveloppée dans un <iframe> Personnalisé et de donner au lien un numéro de version unique (c'est important, car la mise en cache par les navigateurs empêche l'audio de jouer pour une raison quelconque).

Voici la solution pour notre exemple: (en supposant que vous avez un iframe # ttsiframe)

function playTTS(lang,sentence) {
    //get the iframe
    var iFrame = document.getElementById('ttsiframe');

    //remove its sandbox property
    iFrame.removeAttribute('sandbox');

    //this is your reference variable for the iframe body and head tag
    var iFrameBody;

    //get the body
    if (iFrame.contentDocument) { // FF
        iFrameBody = iFrame.contentDocument.getElementsByTagName('body')[0];
        iFrameHead = iFrame.contentDocument.getElementsByTagName('head')[0];
    }
    else if (iFrame.contentWindow) { // IE
        iFrameBody = iFrame.contentWindow.document.getElementsByTagName('body')[0];
        iFrameHead = iFrame.contentWindow.document.getElementsByTagName('head')[0];
    }
    else {
        iFrameBody = iFrame.contentDocument.body;
        iFrameHead = iFrame.contentDocument.head;
    }

    //generate link to Google Translate TTS using arguments (pay attention to random version number at the end)
    var link = 'https://translate.google.com/translate_tts?ie=UTF-8&client=tw-ob&tl=' + lang + '&q=' + sentence.replace(/ /g,'+').replace(/[.]/g,'') + '&rd=' + getRandomInt(0,50000000);

    //add embed element with our link
    iFrameBody.innerHTML = '<embed src="' + link + '" id="TTS">';

    //isolate iframe
    iFrame.setAttribute('sandbox','');
}

vous pouvez simplement utiliser le lien:

Synthèse vocale

0
foad elmi