Перевод текста в речь на PHP с помощью Google Translate

Я пытаюсь преобразовать слова в речь..

До сих пор я пробовал это:

<?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>

Я получаю приветствие и аудио-плеер на выходе. Но файл не воспроизводится и не создается в папке?

Ответ 1

  • Проблема с URL-адресом, к которому вы пытаетесь получить доступ. Это сломано! Сначала вы должны были попробовать. Новый URL-адрес, который я нашел на консоли FF:

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

    Для одного слова Hello. И вы видите, что вам нужно указать язык и длину текста в textlen, хотя он действительно работал для всех предложений, которые я пробовал, не меняя этот var.

  • Другая проблема заключается в том, что вы должны 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);
    }

?>

Ответ 2

Улучшенная версия:

// ~~~ 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>";
       }

Ответ 3

Вы не можете использовать эту услугу бесплатно.

Есть ли свободная квота?Нет, API Google Translate доступен только в качестве платной услуги. Дополнительную информацию см. В разделе "Цены и поддержка". Однако мы предлагаем гаджет Google Translator Google Translator, который будет транслировать ваш сайт бесплатно.

Проверить перевести часто задаваемые вопросы API

Более подробную информацию об этом неофициальном способе использования вы можете найти на Techcrunch

Ответ 4

Ваш файл не создается, потому что вы забыли его создать, используйте нижеприведенный код для создания файла.

$file = "audio/".$file.".mp3";
$ourFileHandle = fopen($file, 'w') or die("can't open file");

Ответ 5

Вы также можете использовать простой код ниже. Просто повторите код, чтобы получить результат. В этом коде нет необходимости сохранять файл или получать разрешения.

 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>";

Ответ 6

Я нашел его:

https://translate.google.com.vn/translate_tts?ie=UTF-8&client=tw-ob&q=ANYTHING_TEXT&tl=YOUR_LANGUAGE_CODE

Важно: client=tw-ob

YOUR_LANGUAGE_CODE может быть en, us, uk, vi и т.д.