2026-08-01
请输入文本?谈谈 TTS 的生成效果
几天配合 GPT-SoVITS 微调了 TTS 模型,效果超出预期,可能不久的将来 AI 语音就能达到人类水平(?),特别是经过深度调教的。本文将给出步骤参考学习,并着重介绍綾地寧々的 TTS 语音效果【建议使用耳机/宅向内容警告⚠️】
先给几个效果参考,整体来说配合精挑的参考和手 K 的停顿和升降调可以达到很不错的效果,不仔细听可能分辨不出来,中文和日语【注:仅供技术交流学习,不发布和公开权重和解包数据】
日文生成效果
0:00 / 0:00
テキストを入力してください。
中文迁移效果
0:00 / 0:00
请输入文本。
日文生成效果
0:00 / 0:00
私はイー君が訓練してくれた、綾地寧々の「音声モデル」なんです
中文迁移效果
0:00 / 0:00
我是 E 君训练出来的綾地寧々的「音声模型」
分两条线,一条是语音数据清洗,然后是配置 GPT-SoVITS[1]开源模型 GPT-SoVITS 和训练。语音数据用的是 YUZU-SOFT (柚子社) 《魔女的夜宴》中綾地寧々的语音数据,我用的是日文原版光碟做的解包,Steam 的高清版解包难度会更大
  1. 1.
    游戏是基于 kirikiri 引擎的,这引擎市面上有一些破解工具了,但都没有最佳实践,厂商有定制化的私有修改。
  2. 2.
    该引擎最大的特点是,游戏内的脚本和资源文件存储在安装目录的 .xp3 文件内,可以配合市面上的开源工具打开和解包
  3. 3.
    比如 https://github.com/morkt/garbro 可以处理 .xp3 文件
  4. 4.
    但柚子社有对引擎做二次魔改,虽然 GARBro 能解包 xp3 拿到游戏内的文件名,但是文件本身内容是加密的,比如其中的 .txt 或者 .ks 剧本是加密的内容。
怎么解:用 LLM 狠狠蹬 (DeepSeek 处理不了的换 GPT Sol),让模型暴力破解,而且需要配合 ghidra-mcp 自动化逆向引擎 dll 对应的拆包和 parser 逻辑,成功破解:
配合 ghidra mcp 模型反编译看逆向工程抓加密逻辑 (这一步很烧 token)
配合 ghidra mcp 模型反编译看逆向工程抓加密逻辑 (这一步很烧 token)
成功发现 XOR 加密、以及配合 ghidra 进一步探索 XOR 密钥计算
成功发现 XOR 加密、以及配合 ghidra 进一步探索 XOR 密钥计算
其中关于 voiceFile 的解密花了很大功夫,DeepSeek 找了很久搞不定(5小时)换 GPT-6 Sol 半小时成功处理并解密,总共解压出来差不多 23,000 个音频文件,批量过了一下 ffmpeg 校验合法性,大概有 1% 是报错的,由于 Copilot 额度快没了,这部分非法文件做了踢出。(让 GPT 继续跑估计能逆向出全部细节)
总之经过漫长的处理,最后形成类似这样带 meta 的全量 jsonl 数据:
最终把剧本和 voiceFile 都解密了,比如下面这句来自游戏原文
最终把剧本和 voiceFile 都解密了,比如下面这句来自游戏原文
nen018_029.wav
0:00 / 0:00
いえ、厄介と言っているわりには、楽しそうだなぁ、と思って。
最后训完,推理的时候在 webui 这里指定参考音频和 text 即可推理
最后训完,推理的时候在 webui 这里指定参考音频和 text 即可推理
下来就是做 TTS 微调了。GPT-SoVITS 是一个 few-shot 音色克隆 TTS 系统,可以仅提供几句话就能克隆音色,但需要达到最佳效果最好做微调。
微调需要关注两个权重,同时也是系统的两个主要模块:GPT 和 SoVITS。
  1. 1.
    此处的 GPT 是一个特制的自回归 Transformer,它同时接收目标文本和参考音频的语义 token 作为输入,以参考音频的 token 序列为 prompt 前缀,自回归地预测后续的语义 token,这些语义 token 既承载了文本的内容,也延续了参考音频的韵律风格
  2. 2.
    SoVITS 同样也会依据参考音频里再独立提取音色特征,配合 GPT 预测,最终生成语音波形(中间比较复杂...)
整个 TTS 任务需要这两个基模共同完成语音生成任务,具体细节官网文档和 WebUI 做的很傻瓜式,只需要配好全局代理等完 py 脚本跑完,并按格式准备好数据集就可以开始跑梯度下降微调模型了(配合 LLM 估计没有难度)
我这波整个微调在双卡 3080 上 2 小时跑完默认训练配置: v2proplus / GPT 15 epoch, SoVITS 8 epoch,注意这里不要用 mac 做训练,官方没有做适配用的 CPU 做梯度,极慢,但是推理可以用 mac 没有大问题(因为推理走的另外一个框架...)
还有一个细节需要注意,由于引入了 GPT,所以 Transformer 那股味一起带进来了:幻觉、词重复、采样不稳定、推理开销重等,换句话说:生成语音需要开奖多次
最后就是测试了,这套架构配合微调后可以生成相对很逼真的语音,非母语学习者可能无法分辨,下面是一个简易的 benchmark 盲测,原声来自验证集不会被训练到,可以对比 AI 泛化效果跟真人差距,供参考。
🎧盲测, 选出原声 - Round 1
❓ 哪一个是原声?
盲测样本 A
0:00 / 0:00
私もいただいていいんですか
盲测样本 B
0:00 / 0:00
私もいただいていいんですか
🎧盲测, 选出原声 - Round 2
❓ 哪一个是原声?
盲测样本 A
0:00 / 0:00
それでですね、これからなんですが......
盲测样本 B
0:00 / 0:00
それでですね、これからなんですが......
🎧盲测, 选出原声 - Round 3
❓ 哪一个是原声?
盲测样本 A
0:00 / 0:00
いえ、力になれたならよかったです。
盲测样本 B
0:00 / 0:00
いえ、力になれたならよかったです。
🎧盲测, 选出原声 - Round 4
❓ 哪一个是原声?
盲测样本 A
0:00 / 0:00
(はい)私の家ですか?
盲测样本 B
0:00 / 0:00
(はい)私の家ですか?
🎧盲测, 选出原声 - Round 5
❓ 哪一个是原声?
盲测样本 A
0:00 / 0:00
女の子同士でもですか?
盲测样本 B
0:00 / 0:00
女の子同士でもですか?
🎧盲测, 选出原声 - Round 6
❓ 哪一个是原声?
盲测样本 A
0:00 / 0:00
あとは占いの延長で、最近は色んな人の相談を受けたり、その解決を手伝ったりしていますね。
盲测样本 B
0:00 / 0:00
あとは占いの延長で、最近は色んな人の相談を受けたり、その解決を手伝ったりしていますね。
🎧盲测, 选出原声 - Round 7
❓ 哪一个是原声?
盲测样本 A
0:00 / 0:00
条件が赤点なんでしたら、確かにそれほど心配はなさそうですね。
盲测样本 B
0:00 / 0:00
条件が赤点なんでしたら、確かにそれほど心配はなさそうですね。
文迁移测试,GPT-SoVITS 支持中文迁移,这里列一些效果,供参考(迁移后效果差的比较多了,原来的训练集里只有日文配音,所以)
日文生成效果
0:00 / 0:00
私はイー君が訓練してくれた、綾地寧々の「音声モデル」なんです
中文迁移效果
0:00 / 0:00
我是 E 君训练出来的綾地寧々的「音声模型」
日文生成效果
0:00 / 0:00
アセンブリの性能魔術には、確かに独自の価値があります。けれど、それは プログラム の本質ではありません。
中文迁移效果
0:00 / 0:00
汇编的性能魔法,确实是有独到的价值。但是对于程序来说,这不是其本质
文测试片段[2]这里选了之前写的一篇文章 ECZN 给 SICP 作序 摘录了一些内容,供参考,找了一些文本,使用中文/日文生成,带不同情绪风格试试效果供参考,注意其中几段配合了不同的参考和手 K 的停顿/升降调,可以预见这类模型的玩法的上限会极高,仅做演示和参考。
第一段 cn
0:00 / 0:00
计算机程序的构造和解释,全称为「ストラクチャー・アンド・インタープリテーション・オブ・コンピュータ・プログラムズ」
第一段 jp
0:00 / 0:00
コンピュータプログラムの構造と解釈、正式名称は「ストラクチャー・アンド・インタープリテーション・オブ・コンピュータ・プログラムズ」
第二段 cn
0:00 / 0:00
它以 "スキーム" 语言为基础,讲解了计算机程序的构造和解释,在很大程度上影响了我对编程语言的理解和认知
第二段 jp
0:00 / 0:00
それはスキームという言語をもとにして、コンピュータプログラムの構造と解釈を解説しているんだ。この本のおかげで、プログラミング言語に対する私の理解も考え方も、ずいぶん変わったんだよ。
第三段
0:00 / 0:00
如果能看下来并感到有意思,那么你很可能是这本书最适合阅读的人群;反之如果你认为没意思,此书可能不适合你,作序的目标就在于此:
第四段
0:00 / 0:00
用十五分钟看完序来判断这本书适不适合你,值不值得花费几十甚至数百个小时的投入
抱怨 cn
0:00 / 0:00
唉,真是拿你没办法……真是够让人操心的。
抱怨 jp
0:00 / 0:00
もう、しょうがない人だなあ……本当に手がかかるんだから。
第五段 平静/陈述
0:00 / 0:00
こんなに長い文章に付き合ってくれるなんて、君はきっと、すごーく優しい人なんだろうなって思ったよ。

这么长的东西你都陪我读完了,我就在想啊,你肯定是个很温柔的人。
第六段 高兴/感动
0:00 / 0:00
こんなに長い文章に付き合ってくれるなんて、君はきっと、すごーく優しい人なんだろうなって思ったよ。

这么长的东西你都陪我读完了,我就在想啊,你肯定是个很温柔的人。
EOF