web-dev-qa-db-ja.com

新しいV2 APIでGoogle Translate TTSを使用する方法

私は以前、Google Translate TTSを呼び出して、次のURLを使用してオーディオファイルをダウンロードしました: http://translate.google.com/translate_tts?tl=en&q=Hello+world

ただし、Googleは動作方法を変更したため、オーディオファイルをダウンロードできなくなりました。 Google Translate API V2の無料トライアルに登録しましたが、TTSオーディオファイルを取得する方法が見つかりません。

何か案が?

14
lolouk44
11
Serhat Şatır
3
super_ylam

Text-to-speechは常に「非公式」のAPIでしたが、現在では不正使用を防ぐためにキャプチャ保護されています。 Translate APIの一部として宣伝されたことはなく、現在、Translate V2 APIには有料またはその他のTTS機能はありません。

しばらくの間続いていた次の グループスレッド には、もう少し背景があります。

3
Adam

ここでは、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();

...その後、前述の方法がError 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','');
}
_

あなたは単にリンクを使うことができます:

テキスト読み上げ

0
foad elmi