
DragonianVoice
用 C++ 把 SVC/TTS 模型跑起来,性能拉满,部署无忧。
项目预览
项目数据
项目介绍
Star 增长趋势
本站每日记录该项目 GitHub 星标变化,观测越久曲线越完整
数据来源:GitHub API 逐日快照 · 收录于 2026-08-09 · 当前星标 ★ 1130
技术标签
使用教程
⚠ 本教程由 AI 依据该项目 README 整理;原始文档不完整,部分步骤为通用流程推断,实际安装请以项目官方文档为准。
⚠ 该项目 README 未提供完整安装说明,以下步骤为通用流程,请以官方文档为准。
环境要求
- 支持 C/C++ 的编译环境(仓库以 Lib 形式提供,支持 C/Cpp/C# 调用)
- 自行将模型转换为 ONNX 格式,并自行为每个模型编写 JSON 配置文件
- 自行下载前置模型(如 hifigan、hubert)并放入对应文件夹
- 确认 ONNX Runtime 版本,Cuda 支持需参考 OnnxRuntime 官方 Release
- 使用本项目须先同意 README 中列出的使用条款
安装与启动步骤
-
1确认项目形态
本仓库已永久停止 UI 维护,成为纯 Lib 项目,代码已迁至 DragonianLib;但 SVC 与 TTS 的 Release 仍在本仓库发布。
-
2引入对应头文件
按需引用 Tacotron、Vits、VitsSvc、DiffSvc、DiffSinger 等头文件,使用 InferClass 下的对应类。
#include <Modules/Models/header/Tacotron.hpp> #include <Modules/Models/header/Vits.hpp> #include <Modules/Models/header/VitsSvc.hpp> #include <Modules/Models/header/DiffSvc.hpp> #include <Modules/Models/header/DiffSinger.hpp> -
3准备模型文件
模型统一放在 Mods 文件夹下的子文件夹中,模型本体需要你自己转换为 ONNX 格式后放好,不能直接用 Python 权重。
-
4编写模型配置
每个模型目录下放一个 xxx.json 配置文件,Folder、Name、Type、Rate、Symbol 等字段需按模板自行编写,必须与训练时参数一致。
{ "Folder": "Atri", "Name": "亚托莉-Tacotron2", "Type": "Tacotron2", "Rate": 22050, "Symbol": "_-!'(),.:;? ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", "Cleaner": "", "AddBlank": false, "Hifigan": "hifigan" } -
5放置前置模型
Tacotron2 需把 hifigan 放到 hifigan 文件夹;RVC、SoVits 需把 hubert / hubert4.0 放到 Hubert 文件夹,否则加载失败。
-
6调用推理接口
构造函数依次传入配置文件 json、进度条回调、参数回调(TTS 可留空)、设备,随后调用 Inference 函数执行推理。
InferClass::Tacotron2; InferClass::Vits; InferClass::VitsSvc; InferClass::DiffusionSvc; InferClass::DiffusionSinger; -
7参考命令行示例
仓库未提供安装命令,可参考 README 给出的 RVC Onnx 命令行推理示例工程了解实际调用方式。
关键配置
| 配置项 | 必填 | 说明 | 示例 |
|---|---|---|---|
Folder | 是 | 模型所在子文件夹名,位于 Mods 目录下 | Atri |
Name | 是 | 模型显示名称 | 亚托莉-Tacotron2 |
Type | 是 | 模型类型,决定加载哪种类 | Tacotron2 |
Rate | 是 | 采样率,须与训练时一致 | 22050 |
Symbol | 是 | 模型的 Symbol 表,Tacotron2/Vits 中必须填写 | _-!'(),.:;? ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuv |
Hop | 是 | HopLength,SoVits 中必须填且须与训练配置一致 | 320 |
如何确认成功
README 未给出启动命令;模型能成功加载且调用 Inference 后正常输出音频即视为可用,加载报错多为配置或前置模型缺失。
常见问题
Q:路径里有中文会导致报错吗?
A:项目本体支持中文路径。2023 年 3 月前的 OnnxRuntime 使用 Win32 A 系列函数不支持非 ANSI 路径,新版已改用 W 系列函数解决,升级即可。
Q:怎么启用 Cuda 加速?
A:README 未给出具体步骤,建议前往 OnnxRuntime 官方仓库的 Releases 页面查看对应版本与 Cuda 支持说明。
Q:SoVits3.0/4.0 在 Dml 上结果不对怎么办?
A:Dml 对部分不支持算子不报错而返回不可预料结果。需使用最新(2023/7/17)版本的 SoVitsOnnx 导出重新导出模型。
Q:Diffusion/Reflow 模型输出全是噪声?
A:推理总步数不要超过模型训练时的最大步数(实际步数=总步数/加速倍率,这里的总步数指 K_Step),先查看配置里的 MaxStep 或 K_Step_Max。
Q:多角色模型怎么配?
A:在配置中填写 Characters 列表,元素为角色名称;单角色模型可以不填。Index/KMeans 聚类文件需按角色数量分别放入模型文件夹。
注意事项
- 使用本项目必须先同意 README 中的条款:禁止出售程序,禁止用于商业游戏、低创游戏及 Galgame 制作,禁止制作电子垃圾。
- 开发者主张生成的音频本身不具版权、应划归公共领域,但歌词、乐曲版权仍归原版权方所有。
- 仓库已停止 UI 项目维护,转为纯 Lib,代码仓库地址为 DragonianLib;SVS 支持请查看 MoeVoiceStudio 分支。
- 最新版本已与 fish-speech 联动,用 ggml 重写组成 fish-speech.cpp 子项目。
核心亮点
- 统一 C++ 推理框架,覆盖 RVC、So-VITS、VITS 等多个主流模型,免去 Python 环境依赖
- 支持 ONNX Runtime 和 PyTorch 双后端,灵活适配不同部署场景
- 集成 HiFi-GAN 声码器,提供完整的音频合成链路,开箱即用
不足之处
- C++ 接口对非 C++ 开发者上手门槛较高,需自行编译和配置依赖
- 文档和社区生态尚在建设中,示例和教程相对有限
适用场景
- 将 SVC/TTS 模型集成到桌面音频软件,实现实时变声或语音合成
- 在资源受限的嵌入式设备上部署语音模型,降低内存和 CPU 占用
- 构建高性能语音服务,替代 Python 推理以提升吞吐量
替代项目
RVC (Retrieval-based Voice Conversion)、so-vits-svc、VITS (PyTorch 实现)
上一篇:Speech2Speech
下一篇:expo-kokoro-onnx
同类项目推荐
dsh-tts-bridge
开源
对话文字自动变本地朗读,解放眼睛
DSH 朗读桥:会话里的话自动交给 DeepSeek 网页端朗读,声音从你自己的电脑里出来
dctts-pytorch
开源
用卷积网络快速训练你的中文语音合成模型
The pytorch implementation of DC-TTS
VALL-E-X
开源
听 3 秒原声就能学舌,任何人的音色都能复刻
An open source implementation of Microsoft's VALL-E X zero-shot TTS model. Demo is a···
podcast_tts
开源
一键生成有对话感的播客音频,告别机械配音
A class for generating realistic audio (TTS) for podcasts and dialogues.
ComfyUI-FL-YuE2
开源
在 ComfyUI 里生成音乐并手动改音符,边听边调
YuE2 music generation and an editable piano roll for ComfyUI
party-mode
开源
上传音乐,d3.js 自动生成酷炫视觉特效
An experimental d3.js music visualizer from 2014. Continued as vizz.fm
speech-tts-cors
开源
绕过跨域限制,一行代码让网页开口说话
百度语音 语音合成 跨域demo以及支持库
wavegrad
开源
几步生成高保真语音,比 WaveNet 快几十倍
A fast, high-quality neural vocoder.
flutter_tts
开源
一行代码让 Flutter 应用开口说话,跨平台 TTS 轻松搞定
Flutter Text to Speech package