PHP实现Google Translate TTS语音合成API调用
本文介绍如何利用PHP调用Google翻译的TTS(Text-to-Speech)接口,将文本实时转换为音频文件。通过构造特定的URL参数并处理数据流,开发者可以免去了录制或上传音频文件的步骤,直接获取指定语言的语音播放文件。
原理与目标
Google Translate 提供了一个隐藏但可用的 TTS 接口 /translate_tts。该接口接受两个核心参数:
tl:目标语言代码(如 'en' 代表英语,'zh-CN' 代表中文)。q:需要转换的文本内容(需进行 URL Encoding)。
准备工作
确保运行环境为支持 fopen 和 fwrite 函数的 PHP 环境。虽然 Google 可能会调整其内部接口策略,但在大多数场景下,直接使用 HTTP 请求访问该端点是可行的。
第1步:构建请求参数与文件名
首先确定要合成的文本和目标语言。例如,我们要合成一句英语问候语。同时定义本地保存的文件名,注意后缀建议使用 .mp3,尽管某些旧版本接口可能返回 wmv 或其他格式,但 mp3 兼容性更佳。
$text = 'how do you do';
$lang = 'en'; // en: English, zh-CN: Chinese Simplified
$reqBaseURL = 'http://translate.google.com/translate_tts?tl=' . $lang . '&q=' . urlencode($text);
$newfname = 'output_' . md5($text) . '.mp3'; // 使用时间戳或哈希作为文件名防止冲突
第2步:打开远程音频流
使用 fopen 以只读二进制模式('rb')打开远程 Google TTS 地址。这一步会触发向 Google 服务器的请求,如果成功,将返回一个文件句柄。
$remote_file = fopen($reqBaseURL, "rb");
if (!$remote_file) {
die("无法连接Google TTS接口或请求被拒绝");
}
第3步:创建本地文件并写入数据
在本地创建同名文件,并使用循环读取远程流的数据块(buffer),逐步写入本地文件。这是最关键的一步,确保文件完整且未损坏。
$newf = fopen($newfname, "wb");
if ($newf) {
while (!feof($remote_file)) {
// 每次读取8KB数据进行传输
fwrite($newf, fread($remote_file, 1024 * 8), 1024 * 8);
}
}
第4步:关闭资源
操作完成后,务必关闭远程和本地文件指针,以释放系统资源。
if ($remote_file) fclose($remote_file);
if ($newf) fclose($newf);
完整可执行脚本
将上述步骤整合为一个完整的函数,方便复用:
<?php
function googleTTS($text, $lang = 'en', $localPath = '') {
if (empty($localPath)) {
$localPath = 'google_tts_' . md5($text) . '.mp3';
}
// 构建URL,注意对文本进行编码
$url = sprintf('http://translate.google.com/translate_tts?tl=%s&q=%s',
urlencode($lang),
urlencode($text)
);
$remoteFile = fopen($url, 'rb');
if (!$remoteFile) {
return false;
}
$localFile = fopen($localPath, 'wb');
if (!$localFile) {
fclose($remoteFile);
return false;
}
// 循环写入
while (!feof($remoteFile)) {
fwrite($localFile, fread($remoteFile, 1024 * 8));
}
fclose($remoteFile);
fclose($localFile);
return $localPath;
}
// 使用示例
$result = googleTTS('Hello World', 'en');
if ($result) {
echo "语音文件已保存至: " . $result;
} else {
echo "生成失败";
}
?>
注意事项
- 网络限制:该 API 依赖外网访问,若服务器位于国内且无外网权限,则无法直接使用。
- 频率限制:高频调用可能被 Google 识别为恶意爬虫而暂时封禁 IP,建议添加适当的延时或缓存机制。
- 格式兼容:部分浏览器或播放器可能需要显式指定 MIME 类型为 audio/mpeg。
以上就是PHP调用Google Translate TTS接口的详细内容,更多关于PHP语音合成及API调用的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









