在 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。公开发布时请选择中性的标准声音,告诉听众音频是生成的,并保持文字版文章的可访问性。