844 字
4 分钟

GPT-SoVITS 本地语音合成完整教程

详细记录GPT-SoVITS本地语音合成模型的部署与使用,涵盖环境配置、模型训练、API调用,以及在项目中的集成方法

前言#

GPT-SoVITS是一款强大的本地语音合成项目,支持零样本声音克隆和少样本训练。本文记录完整的本地部署流程,帮你快速上手AI语音合成技术。


环境要求#

硬件#

  • 显卡:NVIDIA GPU(建议6GB以上显存)
  • 内存:16GB RAM
  • 硬盘:30GB可用空间

软件#

  • Python 3.10+
  • CUDA 11.8 或 12.1
  • cuDNN

安装依赖#

创建虚拟环境#

Terminal window
conda create -n gptsovits python=3.10
conda activate gptsovits

安装PyTorch#

Terminal window
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

克隆项目#

Terminal window
git clone https://github.com/RVC-Boss/GPT-SoVITS.git
cd GPT-SoVITS

安装依赖#

Terminal window
pip install -r requirements.txt

预训练模型下载#

需要下载的模型#

模型说明大小
GPT-SoVITS模型主模型~1.5GB
HuggingFace模型底模~4GB
训练语料(可选)参考音色几百MB

下载地址#

模型存放#

GPT-SoVITS/
├── GPT_SoVITS/
│ └── pretrained_models/
│ ├── GPT-SoVITS/
│ └── huqubert/
└── SoVITS/
└── pretrained_models/

推理使用#

启动WebUI#

Terminal window
python webui.py --port 9876 --colab

浏览器访问#

打开 http://localhost:9876

推理参数#

参数说明建议值
参考音频克隆音色的源5-30秒
文本内容要合成的文字避免超长
语速合成语速1.0正常
音调音高调整0正常

API服务#

启动API服务#

Terminal window
python API.py --port 9880

HTTP调用示例#

import requests
# 合成语音
url = "http://127.0.0.1:9880/tts"
data = {
"text": "你好,欢迎使用GPT-SoVITS语音合成",
"text_lang": "zh",
"ref_audio_path": "path/to/reference.wav",
"prompt_lang": "zh",
"prompt_text": "这是一段参考音频的文字内容"
}
response = requests.post(url, json=data)
# 保存音频
with open("output.wav", "wb") as f:
f.write(response.content)

返回格式#

{
"code": 200,
"message": "success",
"data": {
"audio": "base64编码的音频数据",
"duration": 3.5
}
}

训练自定义音色#

数据准备#

  1. 收集目标音色的音频(5-30分钟)
  2. 音频格式:16bit WAV,16kHz,单声道
  3. 命名规范:speaker_name_001.wav

音频预处理#

Terminal window
python 3_applyforcevocab.py \
--input_path ./raw/ \
--output_path ./processed/

启动训练#

Terminal window
# 训练SoVITS
python train_sovits.py \
--data_path ./processed/ \
--model_path ./output/sovits/
# 训练GPT
python train_gpt.py \
--data_path ./processed/ \
--model_path ./output/gpt/

训练参数#

参数说明建议值
batch_size批量大小显存允许尽量大
learning_rate学习率1e-4
epochs训练轮数10-20

与项目集成#

Python集成#

import subprocess
import base64
import os
class GPTSoVITSClient:
def __init__(self, api_url="http://127.0.0.1:9880"):
self.api_url = api_url
def generate(self, text, ref_audio, ref_text):
import requests
with open(ref_audio, "rb") as f:
ref_audio_b64 = base64.b64encode(f.read()).decode()
data = {
"text": text,
"text_lang": "zh",
"ref_audio_path": ref_audio,
"prompt_lang": "zh",
"prompt_text": ref_text
}
response = requests.post(self.api_url + "/tts", json=data)
result = response.json()
if result["code"] == 200:
audio_b64 = result["data"]["audio"]
audio_data = base64.b64decode(audio_b64)
output_path = "temp_output.wav"
with open(output_path, "wb") as f:
f.write(audio_data)
return output_path
return None

游戏引擎集成#

在UE5中使用:

// 在OpenClaw或其他项目中调用API
void USoVITSManager::GenerateVoice(const FString& Text, const FString& RefAudio)
{
TSharedRef<IHttpRequest> Request = FHttpModule::Get().CreateRequest();
Request->SetURL("http://127.0.0.1:9880/tts");
Request->SetVerb("POST");
Request->SetHeader("Content-Type", "application/json");
TArray<TSharedPtr<FJsonValue>> JsonArray;
// ... 构建JSON
Request->SetContentAsString(JsonString);
Request->OnProcessRequestComplete().BindUObject(this, &USoVITSManager::OnResponse);
Request->ProcessRequest();
}

常见问题#

Q: 显存不足?#

A: 降低batch_size,或使用量化模型。

Q: 合成声音不自然?#

A: 提供更清晰、时长适中的参考音频(10-20秒为佳)。

Q: 中文发音错误?#

A: 使用拼音或带声调的拼音输入。

Q: 如何提升推理速度?#

A: 使用TensorRT加速,或降低推理精度。


总结#

GPT-SoVITS核心要点:

  1. 本地部署 — 无需云服务,保护隐私
  2. 零样本克隆 — 5秒音频即可克隆
  3. 少样本训练 — 5-30分钟数据定制音色
  4. API服务 — 方便项目集成
  5. 游戏应用 — NPC对话、语音播报

本地语音合成让AI应用更灵活可控。


参考资源#


🎉 恭喜! 现在你掌握了GPT-SoVITS本地部署与使用!

GPT-SoVITS 本地语音合成完整教程
https://gzhblog.cn/posts/2026-03/2026-03-24-gpt-sovits-tts/
作者
384400
发布于
2026-03-24
许可协议
CC BY-NC-SA 4.0

这篇文章是否对你有帮助?