指南

在 PHP 和 WordPress 中离线实现文字转语音

PHP 自身没有语音合成,所以大多数教程会把你的文字发送到云端 API 并按字付费。如果网站想为每篇文章提供收听版、朗读通知或为商店加入音频,这笔费用会随每篇文章增长,而且每段文字都会离开你的服务器。请注意:Supertonic 3 暂不支持中文,可朗读英语、日语、韩语等 31 种语言。

本指南介绍如何通过本地 HTTP 服务器从 PHP 调用免费的 SuperClonica 引擎:声音自然,WAV 文件留在你手里,没有按请求计费。

PHP 如何发声

每个文本版本只生成一次音频并以文件形式提供,不要在每次页面访问时合成。

  • 云端 API:声音自然,但需要账号、密钥、按字计费,文字还会存到对方服务器上。
  • SuperClonica:运行在网站旁边的本地 HTTP 服务器,离线提供自然声音、角色声音和自定义声音。
  • 两种方式下 PHP 都是发送 JSON、接收音频,变的只是地址。
  • 它支持 31 种语言,暂不支持中文。

免费试听声音

写代码之前,先打开任意声音页面,输入 30 到 100 个字符的句子,选择语言并点击生成按钮。几秒后就能听到你的网站可以拥有的声音,无需注册。

启动语音服务器

有 NVIDIA 显卡时用 cuda 镜像会更快,但普通处理器就够了。

  • 在同一台机器或私有机器上启动服务器:docker run -d -p 8000:8000 -v superclonica-models:/models superclonica/superclonica:cpu。
  • 首次启动会把约 385 MB 的 Supertonic 3 模型下载到卷中;GET /health 可以告诉你何时就绪。
  • POST /synthesize 接收包含 text、voice、lang、seed 和 normalize 的 JSON,返回 16 位单声道 WAV。
  • voice 可以是 M1–M5、F1–F5 等标准名称,也可以是解码后的声音文件内容。

从 PHP 调用

除标准函数外不需要任何扩展:$voice = json_decode(file_get_contents('voice.json'), true); $body = json_encode(['text' => 'Hello from PHP!', 'voice' => $voice, 'lang' => 'en', 'seed' => 7]); $wav = file_get_contents('http://localhost:8000/synthesize', false, stream_context_create(['http' => ['method' => 'POST', 'header' => 'Content-Type: application/json', 'content' => $body]])); file_put_contents('hello.wav', $wav); 同样的请求也可以用 cURL 扩展或 Guzzle 等 HTTP 客户端发送。使用标准声音时,传入 'voice' => 'F1',无需解码文件。如果网页需要更小的文件,可以用 ffmpeg 把 WAV 转成 MP3。

WordPress 与上线习惯

在 WordPress 中,可以通过发布钩子或后台任务生成音频,保存到 uploads 文件夹并附加到文章上,访问者直接下载文件,无需等待合成。不要把 8000 端口暴露到互联网:设置 SUPERCLONICA_API_KEY 并以 Bearer 令牌发送,或把服务器放在 localhost。公开发布时请选择中性的标准声音,告诉听众音频是生成的,并保持文字版文章的可访问性。