Как использовать Google Translate TTS с новым API V2?

Я использовал Google Translate TTS для загрузки аудиофайла с помощью этого URL: http://translate.google.com/translate_tts?tl=en&q=Hello+world!

Однако Google изменил способ работы, и поэтому я больше не могу загружать аудиофайлы. Я подписался на бесплатную пробную версию API Google Translate V2, но не могу найти, как получить аудиофайлы TTS.

Любая идея?

Ответ 2

Текст в речь всегда был "неофициальным" API, который теперь защищен паролем для предотвращения злоупотреблений. Он никогда не рекламировался как часть API перевода, и в настоящее время нет функциональности TTS в API V2 Translate, оплаченном или иным образом.

Есть еще несколько предпосылок для следующих групп потоков, которые продолжались некоторое время.

Ответ 5

Вот для тех, кто отчаянно пытался воспроизвести Google TTS как аудио в HTML: позвольте мне сэкономить вам пару часов времени и рассказать, как это сделать.

Допустим, у нас есть эта ссылка: https://translate.google.com/translate_tts?ie=UTF-8&client=tw-ob&tl=en&q=I+love+coffee

Если вы попытаетесь воспроизвести этот аудио по указанной ссылке и использовать <audio>, <iframe>, используя сторонние библиотеки или воспроизвести его с помощью Javascript...

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

... тогда вы скоро обнаружите, что ни один из вышеупомянутых способов не работает, так как выдается ошибка 404.

Решение

По-видимому, единственный возможный способ воспроизвести этот универсальный звук TTS - это использовать <embed> заключенный в пользовательский <iframe> и присвоить ссылке уникальный номер версии (это важно, поскольку кэширование браузерами не позволяет воспроизвести звук для некоторых причина).

Вот решение для нашего примера: (если у вас есть 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','');
}