Перевод текста в речь на 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>

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

6 ответов


  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

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

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

?>

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

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

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

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

Регистрация перевести API FAQ

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


Я нашел это:

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 может быть Эн, США, Великобритания, ви ЕТК.


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

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

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

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