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?
6 réponses
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.
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);
}
?>
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>";
}
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
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.
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");
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>";