12

単語音声に変換しようとしています..

今まで私はこれを試しました:

<?php
 $text = "Hello this is a test for voice api of google";

// Name of the MP3 file generated using the MD5 hash
   $file  = md5($text);

// Save the MP3 file in this folder with the .mp3 extension 
   $file = "audio/" . $file .".mp3";
   if($file) {
     echo "created";
   } else {
     echo "not created";
   }

// If the MP3 file exists, do not create a new request
   if (!file_exists($file)) {
     $mp3 = file_get_contents(
        'http://translate.google.com/translate_tts?q=' . $text);
     echo "hello";
     file_put_contents($file, $mp3);
   } else {
     echo "hii";
   }
?>

私のhtmlファイルで:

<audio controls="controls" autoplay="autoplay">
  <source src="<?php echo $file; ?>" type="audio/mp3" />
</audio>

helloとオーディオプレーヤーが出力に作成されています。しかし、ファイルは再生されず、フォルダーにも作成されませんか?

4

6 に答える 6

11
  1. アクセスしようとしている URL に問題があります。これは壊れています !最初に試してみるべきでした。FF コンソールで見つけた新しい URL は次のとおりです。

    http://translate.google.com/translate_tts?ie=UTF-8&q=こんにちは&tl=en&total=1&idx=0&textlen=5&prev=input

    単一の単語Helloの場合。そして、この変数を変更せずに試したすべての文で機能したにもかかわらず、言語とテキストの長さをtextlenで指定する必要があることがわかります。

  2. もう 1 つの問題は、テキストを urlencode() する必要があることです。そうしないと、アクセントや句読点にバグが発生します。したがって、MP3 をダウンロードする行は次のようになります。

    // Language of the sentence
    $lang = "fr";
    $mp3 = file_get_contents(
    'http://translate.google.com/translate_tts?ie=UTF-8&q='. urlencode($text) .'&tl='. $lang .'&total=1&idx=0&textlen=5&prev=input');
    

したがって、完全なコードは次のようになります。

<?php

    $text = "Bonjour, comment allez vous ?";
    // Yes French is a beautiful language.
    $lang = "fr";

    // MP3 filename generated using MD5 hash
    // Added things to prevent bug if you want same sentence in two different languages
    $file = md5($lang."?".urlencode($text));

    // Save MP3 file in folder with .mp3 extension 
    $file = "audio/" . $file . ".mp3";


    // Check folder exists, if not create it, else verify CHMOD
    if (!is_dir("audio/"))
        mkdir("audio/");
    else
        if (substr(sprintf('%o', fileperms('audio/')), -4) != "0777")
            chmod("audio/", 0777);


    // If MP3 file exists do not create new request
    if (!file_exists($file))
    {
        // Download content
        $mp3 = file_get_contents(
        'http://translate.google.com/translate_tts?ie=UTF-8&q='. urlencode($text) .'&tl='. $lang .'&total=1&idx=0&textlen=5&prev=input');
        file_put_contents($file, $mp3);
    }

?>
于 2013-02-07T00:59:44.283 に答える
3

改良版:

// ~~~ Credits to kube ~~~

    $text = "Hello this is a test for voice api of google";
    $text = urlencode($text);
    $lang = urldecode("en");
    $file  = "audio/" . md5($text) .".mp3";
       if (!file_exists($file) || filesize($file) == 0) {
         $mp3 = file_get_contents('http://translate.google.com/translate_tts?ie=UTF-8&q='.$text.'&tl='.$lang.'&total=2&idx=0&textlen='.strlen($text).'&prev=input');
         if(file_put_contents($file, $mp3)){
            echo "Saved<br>";
         }else{
            echo "Wasn't able to save it !<br>";
         }
       } else {
         echo "Already exist<br>";
       }
于 2013-02-07T08:54:36.170 に答える
2

無料ではご利用いただけません。

無料の割り当てはありますか? いいえ、Google Translate API は有料サービスとしてのみ利用できます。詳細については、価格とサポートを参照してください。ただし、無料でウェブサイトを翻訳する Google Website Translator ガジェットを提供しています。

翻訳 API のよくある質問を確認する

この非公式の使用方法の詳細については、Techcrunchを参照してください。

于 2014-05-10T19:19:26.350 に答える
1

以下の簡単なコードを使用することもできます。結果を取得するには、コードをエコーするだけです。このコードでは、ファイルを保存したり、アクセス許可の問題を取得したりする必要はありません。

 echo "<iframe hidden src='http://translate.google.com/translate_tts?ie=UTF-8&q=Welcome%20back%20".$jvm['firstname']."&tl=en&total=2&idx=0&textlen=5&prev=input'></iframe>";
于 2015-10-01T09:51:38.723 に答える
0

ファイルを作成するのを忘れたため、ファイルは作成されていません。ファイルを作成するには、以下のコードを使用してください。

$file = "audio/".$file.".mp3";
$ourFileHandle = fopen($file, 'w') or die("can't open file");
于 2013-02-06T07:58:47.853 に答える