videotrans/confuciustts/README.zh.md
<h1>Confucius4-TTS: 多语种跨语种零样本TTS</h1>
<p><b>一种音色,任意语言。</b></p>
Confucius4-TTS 是一款基于大语言模型(LLM)的先进文本转语音(TTS)系统,专为多语种和跨语种语音合成而设计。基于语音编码器 + 大语言模型(LLM)架构构建,能够在保持说话人音色一致的同时,实现跨语种的高质量语音生成。 在线 Demo 页面体验:[https://confucius4-tts.youdao.com/gradio]
✨ 核心特性
凭借强大的跨语种泛化能力,Confucius4-TTS 允许用户在保持相同音色的同时无缝切换语言,提供流畅、自然且富有表现力的语音。
git clone https://github.com/netease-youdao/Confucius4-TTS.git
cd Confucius4-TTS
conda create -n confuciustts python=3.10 -y
conda activate confuciustts
pip install -r requirements.txt
对于访问 HuggingFace 受限的环境,运行前可设置镜像端点:
export HF_ENDPOINT=https://hf-mirror.com
使用提供的 example.py 脚本进行 zero-shot TTS 合成:
python example.py \
--prompt_wav path/to/reference.wav \
--text "要合成的文本" \
--lang zh \
--out output.wav \
--config config/inference_config.yaml
也可以直接使用 Python API:
import torch
import torchaudio
from confuciustts.cli.inference import ConfuciusTTS
model = ConfuciusTTS(
config_path="config/inference_config.yaml",
device="cuda" if torch.cuda.is_available() else "cpu",
)
audio = model.generate(
text="你好,欢迎使用 Confucius4-TTS。",
lang="zh",
prompt_wav="path/to/reference.wav",
verbose=True,
)
torchaudio.save("output.wav", audio.cpu(), model.sample_rate)
上面的基础路径使用 HuggingFace Transformers 运行 Text2Semantic(T2S)自回归阶段。如需更快的 T2S 生成,可切换到 vLLM 后端(example_vllm.py),通过 PagedAttention 加速 LLM 阶段。
当前支持 vLLM 0.16.0(V1 engine)。更早的 vLLM 版本未经过测试,可能无法运行,因为模型注册和 GPUModelRunner 的 monkey-patch 针对的是 v1 engine 内部实现。
⚠️
vllm对 GPU 架构 / 驱动 / CUDA 有特定要求,可能无法在你的硬件上运行;直接装进基础环境可能破坏其它依赖。建议从基础环境克隆一个独立的 conda 环境,只安装 vLLM 的附加依赖。
# 1. 从基础环境克隆一个专用环境(继承 confuciustts 的依赖)
conda create -n confuciustts_vllm --clone confuciustts
conda activate confuciustts_vllm
# 2. 安装 vLLM 附加依赖
pip install -r requirements_vllm_add.txt
# 3. 运行 vLLM 示例(模型在首次运行时自动下载)
python example_vllm.py \
--prompt_wav path/to/reference.wav \
--text "要合成的文本" \
--lang zh \
--out output_vllm.wav
通过 --stream 参数同时支持非流式与流式生成:
# 非流式:合成整段语音并保存为一个 .wav
python example_vllm.py \
--prompt_wav path/to/reference.wav \
--text "要合成的文本" \
--lang zh \
--out output_vllm.wav
# 流式:逐块生成(model.generate_stream),此处拼接为一个 .wav
python example_vllm.py \
--prompt_wav path/to/reference.wav \
--text "要合成的文本" \
--lang zh \
--out output_vllm_stream.wav \
--stream
提供了一个 Gradio 网页界面,可在浏览器中进行交互式 zero-shot 声音克隆:上传参考音频、输入文本、选择语言并点击生成。
python webui.py --port 7860
然后在浏览器打开 http://<服务器IP>:7860。参考音频通过 HTTP 上传到服务器,因此客户端浏览器无需与服务器共享文件系统。
如需程序化调用(例如从另一台服务/机器调用 TTS),可使用 FastAPI 服务。它同时提供非流式与流式接口,并以 HTTP 文件上传方式接收参考音频,因此客户端与服务器无需在同一台机器上。
python server.py --port 8000
| 接口 | 方法 | 说明 |
|---|---|---|
/api/tts | POST(multipart) | 非流式:返回完整的 .wav(PCM 16-bit) |
/api/tts/stream | POST(multipart) | 流式:原始 int16-LE PCM 分块(采样率见 X-Sample-Rate 头) |
请求表单字段:text、lang(如 zh、en、ja)、reference(音频文件上传)。
# 非流式 → out.wav
curl -F "text=要合成的文本" -F "lang=zh" -F "reference=@path/to/reference.wav" \
http://localhost:8000/api/tts -o out.wav
# 流式 → 原始 int16 PCM(22050 Hz,单声道),按 X-Sample-Rate 头播放
curl -F "text=要合成的文本" -F "lang=zh" -F "reference=@path/to/reference.wav" \
http://localhost:8000/api/tts/stream -o out.pcm
Confucius4-TTS 采用「语音编码器 + LLM」架构,训练流程涵盖以下两个模块:
下载两个外部模型:
# Wav2Vec2-BERT(说话人条件化 & 语义特征提取)
huggingface-cli download facebook/w2v-bert-2.0 \
--local-dir pretrained/w2v-bert-2.0
# Amphion MaskGCT(语义编解码器实现)
git clone https://github.com/open-mmlab/Amphion.git external/Amphion
下载完成后,目录结构如下:
checkpoints/
├── t2s_model.safetensors # T2S 预训练权重
├── s2a_model.pt # S2A 预训练权重
├── wav2vec2bert_stats.pt # 语义特征归一化统计量
├── special_tokens_map.json # 分词器文件
├── tokenizer.json
├── tokenizer.model
└── tokenizer_config.json
pretrained/
├── w2v-bert-2.0/ # Wav2Vec2-BERT 模型
└── campplus/
└── campplus_cn_common.bin # CAMPPlus 说话人编码器权重
external/
└── Amphion/ # MaskGCT 语义编解码器实现
训练数据为 TSV 文件(制表符分隔),不含表头,包含以下 5 列:
| 列名 | 说明 |
|---|---|
lang | 语言代码(如 zh、en、ja) |
wav_path | 目标音频路径 |
norm_text | 归一化后的文本 |
semantic_ids_path | 预提取的语义 token(.npy 文件路径) |
ref_audio_paths | 参考音频路径,支持多个用逗号分隔 |
在 config/train_t2s.yaml 中配置训练/验证集路径:
data:
train_data_path:
- data/train.tsv
val_data_path:
- data/val.tsv
在 config/train_t2s.yaml 中设置预训练 T2S 权重路径:
paths:
t2s_checkpoint: checkpoints/t2s_model.safetensors
单机训练:
python -m confuciustts.cli.train_t2s -c config/train_t2s.yaml
在 config/train_s2a.yaml 中设置权重路径。t2s_checkpoint 指向冻结的 T2S 骨干网络;s2a_checkpoint 为可选项,用于从预训练 S2A 模型继续训练:
paths:
t2s_checkpoint: checkpoints/t2s_model.safetensors
s2a_checkpoint: checkpoints/s2a_model.pt # 可选:从预训练 S2A 权重继续训练
单机训练:
python -m confuciustts.cli.train_s2a -c config/train_s2a.yaml
S2A 训练过程中,T2S 模型、说话人编码器(Wav2Vec2-BERT)和风格编码器(CAMPPlus)均处于冻结状态,只有流匹配 S2A 模型参与训练。
Confucius4-TTS 在多语种及跨语种零样本 TTS 基准测试中表现优异,兼具高可懂度与说话人相似度。
WER/CER 越低越好(↓),SIM 越高越好(↑)。
| Direction | Metric | Confucius4-TTS | F5-TTS† | Spark-TTS | CosyVoice2† | CosyVoice3-0.5B† | CosyVoice3-0.5B + DiffRO† | CosyVoice3-1.5B† | CosyVoice3-1.5B + DiffRO† |
|---|---|---|---|---|---|---|---|---|---|
| en→zh | WER↓ | 6.71 | 11.60 | 12.40 | 13.50 | 8.48 | 5.16 | 8.01 | 5.09 |
| ja→zh | WER↓ | 4.93 | – | – | 48.10 | 6.86 | 3.22 | 6.78 | 3.05 |
| ko→zh | WER↓ | 1.46 | – | – | 7.70 | 5.24 | 1.03 | 3.30 | 1.06 |
| zh→en | WER↓ | 3.19 | 5.57 | 7.36 | 17.10 | 6.83 | 4.41 | 5.39 | 4.20 |
| ja→en | WER↓ | 3.44 | – | – | 11.20 | 5.86 | 4.78 | 5.94 | 4.19 |
| ko→en | WER↓ | 3.42 | – | – | 13.10 | 18.30 | 7.91 | 13.70 | 7.08 |
† 需要参考文本。
</details>| Direction | Metric | Confucius4-TTS | X-Voice | OmniVoice† | IndexTTS2 |
|---|---|---|---|---|---|
| de→zh | WER↓ | 2.86 | 3.07 | 13.10 | 3.46 |
| SIM↑ | 0.569 | 0.516 | 0.691 | 0.544 | |
| en→zh | WER↓ | 3.27 | 3.06 | 4.03 | 3.78 |
| SIM↑ | 0.504 | 0.443 | 0.544 | 0.485 | |
| fr→zh | WER↓ | 2.74 | 3.01 | 18.10 | 3.53 |
| SIM↑ | 0.550 | 0.518 | 0.686 | 0.543 | |
| ja→zh | WER↓ | 3.50 | 3.39 | 79.10 | 4.11 |
| SIM↑ | 0.637 | 0.629 | 0.709 | 0.650 | |
| ko→zh | WER↓ | 2.86 | 3.13 | 11.88 | 2.90 |
| SIM↑ | 0.649 | 0.655 | 0.718 | 0.650 | |
| th→zh | WER↓ | 2.87 | 2.79 | 3.30 | 3.08 |
| SIM↑ | 0.623 | 0.614 | 0.661 | 0.622 | |
| vi→zh | WER↓ | 2.75 | 2.78 | 10.51 | 2.98 |
| SIM↑ | 0.640 | 0.641 | 0.701 | 0.641 |
† 需要参考文本。
</details>| Language | Metric | Confucius4-TTS | Qwen3-TTS | FishAudio S2† | OmniVoice† | VoxCPM2† | X-Voice |
|---|---|---|---|---|---|---|---|
| English | WER↓ | 1.49 | 1.24 | 0.99 | 1.60 | 1.84 | 1.91 |
| SIM↑ | 0.70 | 0.714 | – | 0.741 | 0.753 | 0.627 | |
| Chinese | CER↓ | 0.94 | 0.77 | 0.54 | 0.84 | 0.97 | 1.47 |
| SIM↑ | 0.765 | 0.770 | – | 0.777 | 0.795 | 0.746 |
† 需要参考文本。
</details>| Language | Metric | Confucius4-TTS | ElevenLab | Qwen3-TTS | FishAudio S2† | OmniVoice† | VoxCPM2† | X-Voice |
|---|---|---|---|---|---|---|---|---|
| German | WER↓ | 0.47 | 0.57 | 1.24 | 0.55 | 0.96 | 0.68 | 2.00 |
| SIM↑ | 0.775 | 0.614 | 0.768 | 0.767 | 0.812 | 0.803 | 0.763 | |
| French | WER↓ | 3.66 | 5.22 | 2.86 | 3.05 | 3.35 | 4.53 | 4.73 |
| SIM↑ | 0.723 | 0.535 | 0.716 | 0.698 | 0.801 | 0.735 | 0.746 | |
| Indonesian | WER↓ | 1.12 | 1.06 | – | 1.46 | 1.97 | 1.08 | 1.47 |
| SIM↑ | 0.765 | 0.660 | – | 0.763 | 0.805 | 0.800 | 0.725 | |
| Korean | WER↓ | 1.84 | 1.87 | 1.76 | 1.18 | 2.65 | 1.96 | 2.27 |
| SIM↑ | 0.812 | 0.700 | 0.790 | 0.817 | 0.828 | 0.833 | 0.788 | |
| Thai | WER↓ | 1.56 | 73.94 | – | 4.23 | 3.98 | 2.96 | 4.71 |
| SIM↑ | 0.773 | 0.588 | – | 0.786 | 0.841 | 0.840 | 0.791 | |
| Japanese | WER↓ | 4.14 | 10.65 | 3.82 | 2.76 | 4.03 | 4.63 | 7.13 |
| SIM↑ | 0.788 | 0.738 | 0.771 | 0.796 | 0.828 | 0.828 | 0.765 | |
| Vietnamese | WER↓ | 1.61 | 73.42 | – | 7.41 | 1.37 | 3.31 | 1.40 |
| SIM↑ | 0.751 | 0.369 | – | 0.740 | 0.805 | 0.806 | 0.672 | |
| Italian | WER↓ | 1.30 | 1.74 | 0.95 | 1.27 | 2.07 | 1.56 | 2.27 |
| SIM↑ | 0.787 | 0.579 | 0.752 | 0.747 | 0.812 | 0.780 | 0.780 | |
| Portuguese | WER↓ | 2.48 | 1.33 | 1.53 | 1.14 | 2.51 | 1.94 | 2.61 |
| SIM↑ | 0.796 | 0.711 | 0.805 | 0.781 | 0.859 | 0.837 | 0.794 | |
| Spanish | WER↓ | 1.02 | 1.08 | 1.13 | 0.91 | 1.03 | 1.44 | 2.91 |
| SIM↑ | 0.778 | 0.615 | 0.814 | 0.776 | 0.804 | 0.831 | 0.747 | |
| Russian | WER↓ | 4.64 | 3.88 | 3.21 | 2.40 | 2.23 | 3.63 | 6.49 |
| SIM↑ | 0.787 | 0.675 | 0.784 | 0.790 | 0.783 | 0.811 | 0.799 |
† 需要参考文本。
</details>Confucius4-TTS 基于以下开源项目构建:
如果您在研究或项目中使用了 Confucius4-TTS,请考虑引用:
@misc{confucius4tts_2026,
title = {Confucius4-TTS: A Multilingual and Cross-Lingual Zero-Shot TTS Engine},
author = {{NetEase Youdao}},
year = {2026},
howpublished = {\url{https://github.com/netease-youdao/Confucius4-TTS}},
note = {GitHub repository}
}