抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

前言

最近在网上冲浪时,总会看到各种变音器的视频,用各种萝莉音、曼巴音说一些很好笑的话,没有节操的笑完后,我也很好奇这种变声器是怎么实现的?我们也能拿来玩玩吗?基于好奇我开始查阅这部分信息,最后一个名词-RVC出现了。

34eb10ad-d1fd-42b9-967f-6c6f24d15767

简单查看了一些资料后,我就有以下疑问

  1. 什么是RVC?
  2. 音色是如何转换的?
  3. PTH和index文件是什么?
  4. 如何训练自己的模型?

那么带着这些疑问我开始学习

安装环境

我这边本地的环境如下

系统:Windows10

显卡:N卡3060TI

python版本:3.10.11

通常我们指的RVC开源项目就是
https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI

它提供了一个简易的WEBUI来让我们训练和推理音色模型,能够用少量的数据就能训练一个模型

那么下面我们先来安装一下相关依赖,将仓库clone下来后,创建一下虚拟环境,避免以前安装的依赖污染环境,导致奇奇怪怪的问题

1
2
3
4
git clone https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI.git
cd Retrieval-based-Voice-Conversion-WebUI
python -m venv .venv
.venv\Scripts\activate

环境隔离好后开始安装依赖,由于我的是老黄的3060TI,因此要指定一下cuda的版本

1
2
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117
pip install -r requirements.txt

正常都安装好后,就可以启动一下webui来体验效果了

1
python .\infer-web.py

image-20260113235711271

启动页面后,可以看到模型推理tab页里有个推理音色的下拉列表,正常情况下这里是空的,因此我们先去找个音色模型来体验一下音色转换的效果如何

例如Voice-models 这个网站上可以下载音色模型,这把随便选一个top模型即可,下载后解压到项目目录\assets\weights下即可

至少有一个pth后缀的文件,index可选,当放在weights文件夹下后,在webui的推理音色就能看到对应的音色模型了。

让我们简单录个音来体验一下效果把

原声音频

转换后音频

可以看到效果还是可以的,想要继续体验实时音色转换的效果,可以运行另一个文件

1
python .\gui_v1.py
image-20260118175548877

启动后可以看到这样的页面,选择好刚刚下载的音色模型中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的底模,可以期待一下。