Realtime Voice Changer 的 RVC 客户端使用教程(v1.5.2.4):从 HuBERT 配置到实时变声调优
【免费下载链接】voice-changerリアルタイムボイスチェンジャー Realtime Voice Changer项目地址: https://gitcode.com/gh_mirrors/vo/voice-changer
本教程面向 RVC(Retrieval-based-Voice-Conversion)模型,完整讲解在 Realtime Voice Changer 客户端(v1.5.2.4)中从环境准备、模型上传到实时变声调参的完整流程。读完本文后,你将掌握 HuBERT 特征提取器的安装方法、PyTorch/ONNX 与 index/feature 文件的加载方式,以及 Server Control、Quality Control、Speaker Setting、Converter Setting 等关键面板中每个参数的含义与推荐值,并能结合源码理解延迟(buf/res)与推理精度的取舍原理。
1. 概述:面向 RVC 的实时变声客户端
Realtime Voice Changer 是一套支持多种变声模型的实时语音转换客户端软件,本教程将范围限定于RVC(Retrieval-based-Voice-Conversion)模型。RVC 的核心思路是:先用 HuBERT 等自监督模型把音频转换为特征向量,再通过检索(Index)机制让特征接近训练数据分布,最后由声码器重建音频——这套"检索式"流程也是客户端中 index ratio、feature(.npy) 等参数存在的根本原因。
在使用前有两点需要明确:
- 模型训练需要单独完成:本客户端只负责推理(实时转换),不负责训练。如需自行训练模型,请使用 RVC-WebUI 训练流程;客户端文档还推荐使用浏览器端的录音应用来准备训练用语音数据。
- 模型文件需要自行准备:训练产生的
.pth/.onnx权重、.npy特征、.index检索索引,都需要通过客户端的 Model Uploader 上传后使用。
2. 启动前的准备:安装 HuBERT
运行 RVC 必须要有 HuBERT 特征提取器。请从 RVC-WebUI 的模型仓库中下载hubert_base.pt,并将其放入启动批处理文件所在的文件夹(即客户端程序根目录)。HuBERT 的作用是把 16kHz 的输入音频编码为特征向量(embedding),后续的 Index 检索、模型推理都建立在这些特征之上——这一点可以在源码中得到印证:server/voice_changer/RVC/pipeline/Pipeline.py中sr = 16000,即流水线内部统一在 16kHz 的"HuBERT 世界"里处理特征。
3. 启动 GUI
3.1 Windows 版
解压下载的 zip 压缩包后,运行start_http.bat即可启动。
3.2 Mac 版
解压下载的文件后,执行startHttp.command。如果系统提示"无法验证开发者",请按住 Control 键再点击执行(或右键点击后选择打开)。
3.3 远程连接注意事项
当需要通过远程方式连接时,请使用将http替换为https的.bat(Windows)或.command(Mac)文件,以保证传输加密。此外,若你使用的是仓库提供的 Docker 启动脚本 start2.sh,其默认将容器的 18888 端口映射到主机,USE_GPU=on/off可切换 GPU/CPU 模式——远程部署场景下需要确保该端口可被客户端访问。
4. 客户端选择:进入 RVC 界面
启动后,如果出现如下图所示的 Launcher 启动画面即为成功。请从该画面中选择RVC。
选择 RVC 后,出现如下图所示的 RVC 专用界面即为成功。
界面实际布局在不同版本间会有细微差异,但下述核心区域与参数在 v1.5.2.4 中均存在。
5. GUI 各项设置详解
下面按界面区域逐一说明参数含义、推荐取值与底层实现。
5.1 Server Control(服务器控制)
- start / stop:
start启动服务器,stop停止服务器。 - monitor(监控):显示实时转换的状态。从发声到完成转换的延迟为
buf + res秒,请调整参数使buf时间大于res时间。- vol:变声后的音量大小。
- buf:对音频进行切片的一个片段长度(ms)。缩短 Input Chunk(见 5.6)会减小该值。
- res:对"Input Chunk + Extra Data Length"之和的数据进行转换所花费的时间。同时缩短 Input Chunk 与 Extra Data Length 会减小该值。
- Model Info:获取服务器持有的模型信息。如果服务器与客户端之间的信息同步看起来不成功,请按下Reload按钮重新加载。
- Switch Model:在已上传的多个模型之间进行切换。
关于 buf 与 res 的取舍,可以结合推理实现来理解:在server/voice_changer/RVC/RVC.py的generate_input中,实际参与转换的数据长度为inputSize + crossfadeSize + solaSearchFrame + extraConvertSize,其中extraConvertSize正是由 Extra Data Length 控制的历史音频长度——它越长,单次转换计算量越大,res自然越大。
5.2 Model Setting(模型设置)
Model Uploader(模型上传)
- 打开enable PyTorch后,可以选择 PyTorch 模型(扩展名为
.pth)。当你使用从 RVC 转换来的模型时,PyTorch 项目会出现。(从下一个版本开始,每个槽位只能在 PyTorch 与 ONNX 中选择其一。) - Model Slot:选择将模型放入哪个槽位。设置好的模型可通过 Server Control 中的Switch Model切换。
- Onnx(.onnx):在此指定
.onnx格式的模型。与 PyTorch(.pth)二者必填其一。 - PyTorch(.pth):在此指定
.pth格式的模型。与 Onnx(.onnx)二者必填其一。如果使用 RVC-WebUI 训练,模型位于/logs/weights目录。 - feature(.npy):附加功能,使 HuBERT 提取的特征更接近训练数据。与 index(.index)成对使用。RVC-WebUI 训练时保存于
/logs/your-experiment-name/total_fea.npy。 - index(.index):附加功能,使 HuBERT 提取的特征更接近训练数据。与 feature(.npy)成对使用。RVC-WebUI 训练时保存于
/logs/your-experiment-name/add_XXX.index。 - half-precision:选择推理精度为 float32 或 float16。选择 float16 可以以牺牲精度为代价加速推理;如果运行不正常请关闭。
- Default Tune:输入变调(pitch shift)的默认值,推理过程中也可以再调整。推荐设置参考:
- 男声 → 女声:+12
- 女声 → 男声:-12
- upload:完成上述设置后,点击此按钮使模型进入可用状态。
- Framework:选择使用上传的哪个模型文件(PyTorch 或 ONNX)。该选项将在下一版本中移除。
源码补充:模型文件的自动解析
上传模型后,服务器端会通过 RVCModelSlotGenerator.py 自动解析模型元信息并填充RVCModelSlot(定义见 ModelSlot.py):
- PyTorch(.pth):读取 checkpoint 中的
config、version、f0等字段,自动判别模型类型:version == "v1":Official v1 风格,embChannels=256、embOutputLayer=9、useFinalProj=True;version == "v2":Official v2 风格,embChannels=768、embOutputLayer=12、useFinalProj=False;- 其他情况按 DDPN/WebUI 模型处理,并从 checkpoint 中读取
embedder_name、speaker_info等字段。
- ONNX(.onnx):通过
onnxruntime读取模型元数据(metadata字段),同样判别 v1/v2 风格并读取samplingRate、embChannels、f0等信息;若元数据缺失则标记为deprecated(不推荐),并提示重新生成 onnx 文件。
也就是说,你只需在界面上传模型文件,v1/v2、是否含 f0、采样率等信息均由服务器自动识别,无需手工填写。
5.3 Device Setting(设备设置)
- Audio Input:选择输入设备(麦克风)。
- Audio Output:选择输出终端(扬声器/耳机)。
- output record:从按下 start 开始录音,直到按下 stop 结束。请注意:点击此按钮不会启动实时转换,实时转换请使用 Server Control 中的启动按钮。
5.4 Quality Control(质量控制)
Noise Suppression(噪声抑制):浏览器内置降噪功能的开/关。从前端源码 102-1_QualityArea.tsx 可以看到,这一区域实际提供了 Echo(回声消除)、Sup1、Sup2 三个开关,均作用于客户端侧的音频处理。
Gain Control(增益控制):
- input:增大或减小输入到模型的音频音量,默认值为1。
- output:增大或减小模型输出音频的音量,默认值为1。
F0Detector(基频检测器):选择提取音高的算法,原文档给出的两类为:
- 轻量级
pm - 高精度
harvest
需要注意的是,当前仓库版本中可选的检测器已大大扩展。从 PitchExtractorManager.py 的源码可以看到支持
harvest、dio、crepe、crepe_tiny、crepe_full、rmvpe、rmvpe_onnx、fcpe等多种实现;而 RVCSettings.py 中的默认值为rmvpe_onnx。不同检测器在精度、速度与 GPU 占用上各有取舍,可结合设备性能实测选择。- 轻量级
Analyzer(实验性):在服务器端录制输入和输出。对于输入,麦克风的声音会被发送到服务器并按原样录制,可用于检查"麦克风 → 服务器"的通信路径是否正常;对于输出,模型输出的数据会在服务器端被录制,可用于在确认输入正常后观察模型的行为。
5.5 Speaker Setting(说话人设置)
Destination Speaker Id:这看起来是多说话人支持时的设置,但目前 RVC 官方模型并不支持,因此当前版本中不会使用(未来也基本不会启用)。从 ModelSlot.py 可见
RVCModelSlot.speakers默认仅为{0: "target"},即只有一个目标说话人。Tuning:调整变声的音高,推荐设置参考:
- 男声 → 女声:+12
- 女声 → 男声:-12
index ratio:指定特征向训练特征靠拢的比例。仅在 Model Setting 中同时设置了 feature 和 index 时生效。0表示直接使用 HuBERT 的输出,1表示完全回到原始训练特征。注意:index ratio 大于 0 时,检索可能耗时较长。
其底层实现在 Pipeline.py 的
exec方法中:当self.index is not None and index_rate != 0时,会执行self.index.search()(默认取 k=1 的最近邻),然后将检索到的特征与 HuBERT 特征按index_rate做线性混合:feats * index_rate + (1 - index_rate) * feats。这就是"向训练特征靠拢"的具体含义。Silent Threshold(静音阈值):触发变声的音量阈值。如果音频的 RMS 小于该值,则不进行变声,直接返回静音。此时转换流程被跳过,因此负载更小。
源码佐证:在 RVC.py 的
inference方法中,if vol < self.settings.silentThreshold: return np.zeros(...),直接返回零信号而跳过整个 Pipeline。前端滑块的取值范围为 0 到 0.001(步长 0.00001),默认值在 RVCSettings.py 中为0.00001。
5.6 Converter Setting(转换设置)
InputChunk Num(128 sample / chunk):决定单次转换切分并处理多长的音频。数值越大,转换效率越高,但
buf值越大,转换开始前的最大等待时间越长。buff:中会显示大约所需时间。Extra Data Length:决定转换时在输入中纳入多少"过去的历史音频"。历史语音越长,转换精度越高,但
res越长、计算时间越久。文档特别指出:由于 Transformer 是瓶颈,计算时间大致随该长度的平方增长。源码补充:
RVCSettings.extraConvertSize的默认值为1024 * 4(对应 4k 采样点)。在 Pipeline.py 中,这段历史数据会作为silence_front参与处理:在基频提取与 Index 检索前,先跳过这部分"静音前缀",推理完成后再裁剪掉对应的输出,从而保证输出的实时衔接。GPU:如果你的机器有 2 块及以上 GPU,可以在此选择使用的 GPU。在 RVC.py 的
update_settings中,修改gpu会触发deviceManager.setForceTensor(False)并重新初始化整个 Pipeline。
6. 实时变声的完整调用链
把上述参数串起来,一次实时转换在服务端的完整流程(见 RVC.py 与 Pipeline.py)如下:
- 输入缓冲:
generate_input将新到达的音频以模型采样率切块,与历史缓冲拼接,并按inputSize + crossfadeSize + solaSearchFrame + extraConvertSize计算本次转换长度(不足 128 的倍数时补齐,因为模型输出的 hop size 为 128)。 - 音量判断:
inference中计算 RMS,若低于silentThreshold则直接返回静音。 - 重采样:将音频从模型采样率(如 48000)重采样到 16kHz(HuBERT 世界的采样率)。
- 基频提取:根据
f0Detector选择的算法(dio/harvest/crepe/rmvpe 等)提取音高,并按tran(Tuning)进行移调。 - 特征提取:通过 HuBERT(
embOutputLayer、useFinalProj由模型元信息决定)提取特征。 - Index 检索:若配置了 index 且
indexRatio > 0,用index.search检索训练特征并混合;protect参数(默认 0.5)控制当基频估计失败时混合多少原始特征,以保证稳定性。 - 推理:
inferencer(PyTorch 或 ONNX 版本)生成变声后的音频,输出采样率回到模型采样率,最后乘以音量因子输出。
理解这条链路,就能明白 5.1~5.6 中各参数为何会相互影响:例如 InputChunk 与 Extra Data Length 共同决定res,而静音阈值可以直接跳过第 4~7 步以降低负载。
7. 调优速查表
| 目标 | 推荐做法 |
|---|---|
| 男声 → 女声 | Tuning / Default Tune 设为+12 |
| 女声 → 男声 | Tuning / Default Tune 设为-12 |
| 降低延迟(buf) | 减小 InputChunk Num |
| 降低计算耗时(res) | 同时减小 InputChunk Num 与 Extra Data Length |
| 提升转换精度 | 增大 Extra Data Length、使用高精度 F0Detector(如 harvest) |
| 让音色更贴近训练数据 | 配置 feature + index,并调大 index ratio |
| 减少静音时 CPU/GPU 负载 | 调高 Silent Threshold |
| 推理速度优先 | 打开 half-precision(float16),若异常则关闭 |
| 多 GPU 环境 | 在 Converter Setting 中选择目标 GPU |
8. 常见问题排查
- 界面出现但无法转换:确认 HuBERT(
hubert_base.pt)已放入启动文件所在目录;确认模型已通过 upload 上传成功,并在 Server Control 中用 Switch Model 选中。 - 服务器与客户端信息不同步:在 Server Control 点击Model Info旁的 Reload 按钮。
- 开启 half-precision 后报错或输出异常:关闭 half-precision,回退到 float32。源码中 Pipeline 遇到半精度相关异常时会自动回退并提示。
- 远程连接失败:使用 https 版本的启动脚本,并确保服务器端口(Docker 部署时为 18888)可达。
- onxx 模型提示 deprecated:说明该 ONNX 文件缺少必要的元数据,请重新导出 ONNX 文件(仓库提供了 export2onnx.py 用于从 PyTorch 模型转换导出)。
本文以 v1.5.2.4 版本为基础,结合当前仓库源码说明了每个参数背后的实现逻辑。若你使用的是更新版本(如 1.5.2.5 及之后的版本),界面中的 Framework 等过渡选项可能已被移除,但本教程中的核心参数与调优思路仍然适用。
【免费下载链接】voice-changerリアルタイムボイスチェンジャー Realtime Voice Changer项目地址: https://gitcode.com/gh_mirrors/vo/voice-changer
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考