PHP实现Google Translate TTS语音合成API调用

晚来风
晚来风
发布时间:2026-10-14 | 5人浏览过
原创

本文介绍如何利用PHP调用Google翻译的TTS(Text-to-Speech)接口,将文本实时转换为音频文件。通过构造特定的URL参数并处理数据流,开发者可以免去了录制或上传音频文件的步骤,直接获取指定语言的语音播放文件。

原理与目标

Google Translate 提供了一个隐藏但可用的 TTS 接口 /translate_tts。该接口接受两个核心参数:

  1. tl:目标语言代码(如 'en' 代表英语,'zh-CN' 代表中文)。
  2. q:需要转换的文本内容(需进行 URL Encoding)。
调用该接口会直接返回音频流(通常为 MP3 格式)。我们的目标是利用 PHP 将这些流数据读取并写入服务器本地磁盘。

准备工作

确保运行环境为支持 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调用的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表