Text-To-speech en PHP avec Google Translate

je suis en train de convertir motsdiscours ..

Jusqu'à maintenant, j'ai essayé ceci:

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

Dans mon fichier html :

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

je suis créé hello et un lecteur audio en sortie. Mais aucun fichier n'est joué et ce n'est créé dans le dossier?

10
demandé sur Nikolay Shmyrev 2013-02-06 11:46:09

6 réponses

  1. il y a un problème avec l'url à laquelle vous tentez d'accéder. C'est cassé ! Vous devriez avoir essayé la première. La nouvelle URL, ce que j'ai trouvé sur le FF de la console est le suivant :

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

    Pour le seul mot Bonjour. Et vous voyez que vous ayez à préciser la langue, et la longueur de votre texte textlen, même si cela a fonctionné pour toutes les phrases que j'ai essayé sans changer la var.

  2. un autre problème est que vous devez urlencode() votre texte, ou vous aurez un bug avec les accents et la ponctuation. Ainsi la ligne pour télécharger le MP3 devient:

    // 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');
    

ainsi le code complet ressemble à :

<?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);
    }

?>
10
répondu kube 2016-04-16 13:15:33

Une version améliorée:

// ~~~ 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>";
       }
2
répondu HamZa 2013-02-07 08:54:36

Vous ne pouvez pas utiliser ce service gratuitement.

Est-il des quotas? Non, L'API de traduction de Google N'est disponible qu'en tant que service payant. Veuillez consulter prix et soutien pour plus de détails. Cependant, nous offrons le site Google Traducteur gadget, qui traduira votre site Web sans frais.

Case translate API FAQ

plus d'informations sur ce mode d'utilisation non officiel que vous pouvez trouver sur Techcrunch

1
répondu Hrvoje Golcic 2014-05-10 19:19:26

j'ai trouvé ça:

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

Important:client=tw-ob

YOUR_LANGUAGE_CODE peut être fr,us,uk,vi, etc.

1
répondu Tan Nguyen 2017-10-14 09:47:18

votre fichier ne crée pas parce que vous avez oublié de le créer , utilisez le code ci-dessous pour créer le fichier.

$file = "audio/".$file.".mp3";
$ourFileHandle = fopen($file, 'w') or die("can't open file");
0
répondu Yogesh Suthar 2013-02-06 07:58:47

Vous pouvez aussi utiliser le code simple ci-dessous. Faites juste écho au code pour obtenir le résultat. Dans ce code, il n'est pas nécessaire d'enregistrer un fichier ou d'obtenir l'autorisation de problèmes.

 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>";
0
répondu Arijit Aich 2015-10-01 09:51:38