前言
最近在网上冲浪时,总会看到各种变音器的视频,用各种萝莉音、曼巴音说一些很好笑的话,没有节操的笑完后,我也很好奇这种变声器是怎么实现的?我们也能拿来玩玩吗?基于好奇我开始查阅这部分信息,最后一个名词-RVC出现了。
简单查看了一些资料后,我就有以下疑问
- 什么是RVC?
- 音色是如何转换的?
- PTH和index文件是什么?
- 如何训练自己的模型?
那么带着这些疑问我开始学习
安装环境
我这边本地的环境如下
系统:Windows10
显卡:N卡3060TI
python版本:3.10.11
通常我们指的RVC开源项目就是
https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI
它提供了一个简易的WEBUI来让我们训练和推理音色模型,能够用少量的数据就能训练一个模型
那么下面我们先来安装一下相关依赖,将仓库clone下来后,创建一下虚拟环境,避免以前安装的依赖污染环境,导致奇奇怪怪的问题
1 | git clone https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI.git |
环境隔离好后开始安装依赖,由于我的是老黄的3060TI,因此要指定一下cuda的版本
1 | pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117 |
正常都安装好后,就可以启动一下webui来体验效果了
1 | python .\infer-web.py |

启动页面后,可以看到模型推理tab页里有个推理音色的下拉列表,正常情况下这里是空的,因此我们先去找个音色模型来体验一下音色转换的效果如何
例如Voice-models 这个网站上可以下载音色模型,这把随便选一个top模型即可,下载后解压到项目目录\assets\weights下即可
至少有一个pth后缀的文件,index可选,当放在weights文件夹下后,在webui的推理音色就能看到对应的音色模型了。
让我们简单录个音来体验一下效果把
原声音频
转换后音频
可以看到效果还是可以的,想要继续体验实时音色转换的效果,可以运行另一个文件
1 | python .\gui_v1.py |
启动后可以看到这样的页面,选择好刚刚下载的音色模型中pth和index文件就可以体验实时转换了,可以看到这里有很多参数,具体功能如下
| 参数名称 | 作用说明 | 影响维度 | 推荐值(实时场景) | 备注 / 常见误区 |
|---|---|---|---|---|
| 响应阈值 | 控制输入音量低于阈值时是否触发推理,用于抑制环境噪声和呼吸声 | 稳定性 / 噪声 | -45 ~ -35 dB |
过高会吞字,过低会把噪声也变声 |
| 音调设置(Pitch Shift) | 对提取到的 F0 进行整体升降(半音单位) | 音高 / 性别感 | 男→女:+6 ~ +12女→男:-6 ~ -12 |
这是“整体平移”,不是自动性别识别 |
| 性别因子 | 控制模型对 F0 和共振峰的性别倾向(部分 UI 中体现) | 音色倾向 | 0.0 ~ 0.5 |
本质是 F0/谱形的辅助缩放,不是独立模型 |
| 检索特征占比(Index Rate) | 控制 FAISS 检索特征在最终内容特征中的权重 | 清晰度 / 延迟 | 0.3 ~ 0.6 |
太高会失真、延迟上升;实时不建议 >0.7 |
| 响度因子(Volume / Loudness) | 对输出音频进行响度补偿或缩放 | 音量一致性 | 1.0 ~ 1.2 |
不是压缩器,不能解决爆音 |
| 音高算法 | 决定 F0 提取方式 | 延迟 / 稳定性 | 实时:Harvest / DIO高质:RMVPE |
RMVPE 精度高但延迟大 |
| 采样长度(Frame / Block Size) | 每次推理处理的音频帧长度(ms) | 延迟 / 连贯性 | 20 ~ 40 ms |
越小延迟越低,但更容易抖 |
| 进程数 | 并行推理或预处理线程数量 | 性能 | 1 ~ 2(单卡) |
多进程≠更快,容易抢 GPU |
| 淡入淡出长度 | 帧与帧拼接时的交叉平滑长度 | 平滑度 | 5 ~ 15 ms |
太短有爆音,太长增加延迟 |
| 额外推理时长 | 为防止切帧不完整而额外保留的上下文时间 | 稳定性 | 0 ~ 0.1 s |
实时建议尽量小 |
基本原理
体验了一下后对于音色转换的原理开始好奇,下面贴一个GPT的原理解释
RVC(Retrieval-based Voice Conversion,基于检索的音色转换)之所以能做到低延迟、可实时,核心在于:
“说话内容(语音学特征)和说话人音色(身份特征)解耦 + 轻量生成网络 + 特征检索补偿细节”
我会按整体架构 → 实时链路 → 关键模块 → 为什么能实时 → 局限与优化来系统讲清楚。
RVC 在做什么(一句话版)
输入:你的声音(实时) → 提取“你说了什么” → 替换成“目标说话人的音色” → 输出新的声音
它不是 TTS(文字转语音),而是语音 → 语音的转换。
RVC 整体架构(核心模块)
1
2
3
4
5
6
7
8
9
10
11
12
13 麦克风输入
↓
音频切块(20~40ms)
↓
内容特征提取(HuBERT / ContentVec)
↓
F0(基频)提取(音高)
↓
音色映射生成器(Generator)
↓
HiFi-GAN Vocoder
↓
扬声器 / 虚拟声卡输出实时的关键:每一步都能流式(Streaming)运行
RVC 使用 HuBERT / ContentVec 这类自监督模型,提取:
- 发音结构
- 音素节奏
- 语速
- 停顿
👉 几乎不包含音色信息
这一步相当于得到一个“谁说都一样的语音骨架”。
音色来自:
- 训练阶段:目标说话人的语音数据
- 生成阶段:模型参数中隐式编码
模型学到的是:
- 共振峰分布
- 声带特性
- 发声习惯
用我自己的话总结一下就是:
RVC 采用流式方式处理输入语音,并将语音信息解耦为“内容信息”和“音色建模”。
实时语音会被切分为短帧,通过 HuBERT / ContentVec 等自监督模型提取仅包含发音和语义结构的内容特征;同时独立提取每一帧的基频(F0)等韵律信息,以保留语调和情绪变化。
随后,生成模型在不改变内容的前提下,将内容特征与 F0 映射到目标说话人的音色空间,生成对应的声谱图,并最终由 HiFi-GAN 等声码器还原为音频输出。RVC流动处理输入的语音,将它拆分为“内容信息”和“音色信息”。
实时语音会被切分为帧,基于HuBERT / ContentVec 等自监督模型生成“内容信息”,同时还会提取每帧里面的语调和情绪变化特征生成“音色特征”。
然后将音色特征映射到目标说话人的音色空间里,生成新的音频图,然后再由“HiFi-GAN“ 等声码器还原为音频。
PTH和index文件
通常我们指的音色模型就是指 pth+index文件
pth:模型权重文件,保存的是Generator(音色转换网络)的参数,它决定了声音像不像目标音色。
index:FAISS向量索引文件,保存的是目标说话人训练数据的内容特征向量,它决定了声音是否清楚和自然,但index文件是可选的。
小结
个人体验下来RVC的效果还是可以的,但不知是麦克风质量不好还是找的模型问题,转换起来还是会有一些不自然,这个后续我找个干净的音频训练一下再试试。同时看项目的作者说马上推出v3的底模,可以期待一下。