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