Google Translate 的 translate_tts 端點可將文字轉為語音(MP3),免去自建 TTS 服務的麻煩。本文示範以 PHP 串流下載並儲存為本地音檔。
<?php
/**
* 下載 Google TTS 音檔
*
* @param string $text 要轉換的文字(需 URL 編碼)
* @param string $lang 語言代碼,如 en、zh-TW、ja
* @param string $savePath 儲存路徑
* @return bool
*/
function fetchGoogleTts(string $text, string $lang, string $savePath): bool
{
$url = 'https://translate.google.com/translate_tts' . '?' . http_build_query([
'ie' => 'UTF-8',
'tl' => $lang,
'q' => $text,
'client' => 'tw-ob', // 必要參數,模擬瀏覽器
]);
$ctx = stream_context_create([
'http' => [
'method' => 'GET',
'header' => "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36\r\n" .
"Referer: https://translate.google.com/\r\n",
'timeout' => 15,
'follow_location' => 1,
],
'ssl' => ['verify_peer' => false, 'verify_peer_name' => false], // 僅測試用,生產請驗證
]);
$data = @file_get_contents($url, false, $ctx);
if ($data === false || strlen($data) < 100) {
error_log("Google TTS 下載失敗:{$url}");
return false;
}
return (bool)file_put_contents($savePath, $data);
}
// ----- 使用範例 -----
$text = 'Hello, welcome to our website!';
$lang = 'en';
$file = __DIR__ . '/tts_' . md5($text . $lang) . '.mp3';
if (fetchGoogleTts($text, $lang, $file)) {
echo "音檔已儲存:{$file} (" . filesize($file) . " bytes)";
} else {
echo "下載失敗,請檢查網路或參數。";
}
| 參數 | 說明 | 範例 |
|---|---|---|
tl | 目標語言代碼(ISO 639-1) | en, zh-TW, zh-CN, ja, ko |
q | 待轉換文字,需 urlencode | Hello%20World |
client | 客戶端標識,tw-ob 可繞過部分限制 | tw-ob / t / gt |
ie | 輸入編碼 | UTF-8 |
ffmpeg -i concat:)。verify_peer 並配置 CA 憑證。function ttsCache(string $text, string $lang, string $cacheDir): string
{
$hash = md5($text . '|' . $lang);
$path = $cacheDir . '/' . $hash . '.mp3';
if (!is_file($path)) {
fetchGoogleTts($text, $lang, $path);
}
return $path;
}
Google Translate TTS 為原型開發、個人專案提供零成本語音合成方案。但請謹記:非官方 API、有頻率限制、隨時失效。正式產品請採用官方雲端服務或離線 TTS 引擎(如 eSpeak、Piper、Coqui TTS)。