如何把 TTS 服务作为 Mary-TTS 兼容 HTTP 后端接入现有语音工具?
如果你的屏幕阅读器、智能家居 HUB 或语音助手已经通过 HTTP 调用 Mary-TTS 接口,现在想换成更自然的神经语音,又不想改工具端的代码,可以把 TTS(Coqui TTS)作为 drop-in 替换:它的内置 demo server 带有一个 Mary-TTS 兼容层,实现了兼容工具通常依赖的三个核心端点 /locales、/voices 和 /process。这篇文章覆盖从安装、启动服务到逐端点验证的完整操作路径。前提是你已经装好 TTS,并能拿到一个 TTS 模型(官方发布的模型或自己训练的 checkpoint)。
Mary-TTS 兼容层实现了哪些端点
TTS 服务器不需要实现 Mary-TTS 的全部接口,Mary-TTS 兼容层文档指出兼容工具一般只需要以下三个端点:
/locales(GET):返回支持的语言列表,格式为[locale]\n...,例如en_US、de_DE或en;/voices(GET):返回音色列表,格式为[name] [locale] [gender]\n...,name不能含空格,gender传统上是f或m;/process?INPUT_TEXT=[my text]&INPUT_TYPE=TEXT&LOCALE=[locale]&VOICE=[name]&OUTPUT_TYPE=AUDIO&AUDIO=WAVE_FILE(GET/POST):处理输入文本并返回 wav 文件。INPUT_TYPE、OUTPUT_TYPE、AUDIO还有其它取值,但兼容工具中通常写死。
准备与安装
安装方式见 安装文档,推理场景推荐 pip 安装:
pip install TTS
该文档给出的 Python 支持范围是 >=3.7 <3.11.0,而 setup.py 中实际声明的是 python_requires=">=3.9.0, <3.12",两处范围不一致,建议以 setup.py 声明的新环境为准。从源码安装(git clone 后 make system-deps、make install)的说明同样在 安装文档 中。
安装通过 pip 完成后,可以直接使用终端命令 tts-server(由 setup.py 中的 console_scripts 入口点 tts-server = TTS.server.server:main 注册);如果是在源码目录里工作,则直接运行 server 入口脚本。
启动服务并绑定 Mary-TTS 端口
先用 --list_models 列出官方发布的 TTS 与 vocoder 模型,再按格式 <language>/<dataset>/<model_name> 选择(来自 server README):
python TTS/server/server.py --list_models
服务器端口的默认值是 5002(server.py 中 --port 参数默认值)。而经典 Mary-TTS 服务运行在 59125 端口,已有工具如果按 Mary-TTS 习惯配置了地址,就要在启动时显式把端口改过去:
python TTS/server/server.py \
--model_name tts_models/en/ljspeech/tacotron2-DCA \
--vocoder_name vocoder_models/en/ljspeech/multiband-melgan \
--port 59125
如果不传 --model_name,服务会使用默认模型 tts_models/en/ljspeech/tacotron2-DDC。在有 GPU 的机器上,按 server README 的方式启用 CUDA:
CUDA_VISIBLE_DEVICES="0" python TTS/server/server.py \
--model_name tts_models/en/ljspeech/tacotron2-DCA \
--vocoder_name vocoder_models/en/ljspeech/multiband-melgan \
--use_cuda True \
--port 59125
服务启动后监听 host="::"(即全部网卡地址),局域网内的工具也能访问;--debug 可开启 Flask 调试模式,仅建议本地开发时使用。
可选分支:用自己的训练模型。server README 给出了用 checkpoint 启动的例子(--tts_checkpoint、--tts_config、--vocoder_checkpoint、--vocoder_config),但当前 server.py 的 argparse 实际定义的是 --model_path、--config_path、--vocoder_path、--vocoder_config_path 以及 --speakers_file_path(多说话人模型用)。两处参数名不一致,以 server.py 中实际存在的参数为准:
python TTS/server/server.py \
--model_path /path/to/tts/model.pth \
--config_path /path/to/tts/config.json \
--vocoder_path /path/to/vocoder/model.pth \
--vocoder_config_path /path/to/vocoder/config.json \
--port 59125
其中 /path/to/... 替换为你自己的模型 checkpoint 与 config 文件路径。
逐个端点验证兼容层
服务在 localhost:59125 运行时,用 Mary-TTS 兼容层文档给出的 CURL 请求逐一测试。也可以把同样 URL 输入浏览器查看结果。
- 检查语言端点:
curl http://localhost:59125/locales
文档示例返回当前激活模型的 locale,如 en。
- 检查音色端点:
curl http://localhost:59125/voices
文档示例返回 glow-tts en u:名字取自模型名,locale 取自 --model_name 的语言段,gender 固定为 u(undefined,见下文限制)。
- 检查合成端点,生成一个 wav 文件:
curl http://localhost:59125/process?INPUT_TEXT=this+is+a+test > test.wav
返回结果是一个可直接播放的 wav 文件(server.py 中以 mimetype="audio/wav" 发送)。/process 同时支持 POST,请求体按表单参数解析,工具端无论发 GET 还是 POST 都能命中该端点。
三个端点都按预期返回,即可把现有工具里 Mary-TTS 服务的地址指向 http://<服务器地址>:59125。
限制与边界
Mary-TTS 兼容层文档明确说明了这套实现是“可接受的妥协”,接入前需要知道:
- 同一时间只有一个活跃模型:
/locales和/voices只返回当前--model_name对应的 locale 和模型名(模型名会被当作 "voice"),而不是所有可用选项; /process只读取INPUT_TEXT参数,LOCALE、VOICE、INPUT_TYPE、OUTPUT_TYPE、AUDIO等参数会被忽略,输出始终是 WAV 文件;- Coqui 模型没有定义 gender,
/voices中的 gender 恒为u; - 文档提到 API 未来可能扩展为同时支持多语言和多音色,当前版本不这样做。如果你的工具依赖按
LOCALE/VOICE参数切换音色,这个兼容层无法满足。
更多端点细节以及 Mary-TTS 完整 API 的官方文档入口,参见 docs/source/marytts.md;服务器页面与配置示例见 TTS/server/README.md 与 conf.json。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0631
MiniCPM5-2BMiniCPM5-2B 是一款面向端侧、本地部署和资源受限场景的 2B 稠密 Transformer,能够达到同尺寸开源模型 SOTA 水平。Markdown00
video-shotcraftAI宣传片skill,使用 Remotion 制作电影级产品视频:提供106 张镜头配方卡和可复用的视频魔板。适用于 Claude Code 与 Codex以及所有其他智能体Markdown00
HivisionIDPhotos⚡️HivisionIDPhotos: a lightweight and efficient AI ID photos tools. 一个轻量级的AI证件照制作算法。Python09
DragonOSDragonOS is an operating system developed from scratch using Rust, with Linux compatibility. It is designed for **Serverless** scenarios. 使用Rust从0自研内核,具有Linux兼容性的操作系统,面向云计算Serverless场景而设计。Rust00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00