- 人工智能
- 语音
- 模型推理服务
- 深度学习
【免费下载链接】voice-changer
リアルタイムボイスチェンジャー Realtime Voice Changer
本篇技术指南围绕开源仓库 voice-changer(Realtime Voice Changer)的 RVC 客户端使用教程展开,完整讲解从下载解压、启动 Launcher、选择 RVC 引擎,到加载模型、配置 Speaker / Converter / Device / Quality Control 等全部参数项的实战流程,并结合仓库源码(server/voice_changer/RVC/下的设置类、推理管线与模型槽生成器)说明每个参数背后的底层实现原理。读完本文,你将能够在本地或远程环境一键跑通 RVC 实时变声,并掌握buf / res延迟、index ratio、静音阈值、F0 检测器与模型融合等关键调优手段。
一、适用范围与背景概念
本应用是支持多种变声模型的实时语音转换客户端软件,本文档将讲解范围限定在 RVC(Retrieval-based-Voice-Conversion)模型的实时变声。为了表述清晰,本文沿用教程中的两个约定称呼:
- original-RVC:指原版 Retrieval-based-Voice-Conversion-WebUI 项目(RVC-Project 社区维护),其训练产物约定存放在
/logs/weights(模型权重)与/logs/your-experiment-name/total_fea.npy(特征文件)。 - ddPn08-RVC:指由 ddPn08 创建的 RVC-WebUI 实现,其训练产物约定存放在
/models/checkpoints(模型权重)与/models/checkpoints/your-model-name_index/your-model-name.0.big.npy(特征文件)。
无论是哪个来源训练出的 RVC 模型,都可以通过本客户端的 Model Setting 区域加载并进行实时转换。仓库中的RVCModelSlotGenerator(server/voice_changer/RVC/RVCModelSlotGenerator.py)会在加载模型时自动识别其来源:通过检查.pth检查点中的config长度、version字段与f0标志,区分 original-RVC 的 v1 / v2、ddPn08-RVC(webui)以及 voras_beta 等模型类型,并据此确定嵌入通道数(256 或 768)、HuBERT 输出层与是否使用 final projection。
二、前置准备与注意事项
- 模型训练必须单独进行,本客户端只负责推理(实时变声),不包含训练功能。
- 想自己训练模型,请参考 original-RVC 与 ddPn08-RVC 的训练工具。
- 浏览器端录音应用(部署于 GitHub Pages)适合在浏览器里快速准备训练用语音素材。
- 官方还发布了训练技巧(TIPS for training),训练前建议先阅读。
三、启动步骤
Windows 版
解压下载的 zip 文件后,运行start_http.bat即可。
Mac 版
解压下载文件后,执行startHttp.command。如果系统提示“无法验证开发者”,请按住 Control 键再次点击执行(或右键点击执行)。
远程连接时的注意事项
通过远程方式连接时,请使用将http替换为https的.bat(Windows)或.command(Mac)启动文件,以保证通信加密。
控制台(Console)
运行.bat(Windows)或.command(Mac)文件后,会显示如下控制台界面,首次启动会从互联网下载运行所需的各种数据。根据网络环境不同,多数情况下需要等待 1~2 分钟。
启动器(Launcher)与选择 RVC
所需数据下载完成后,会出现如下 Launcher 界面。请在此界面中选择RVC进入 RVC 客户端。
Launcher 的这一“选择引擎”机制对应仓库前端组件client/demo/src/components/demo/010_Demo.tsx与各引擎的 GUI 定义文件;RVC 引擎的界面布局定义在 client/demo/public/assets/gui_settings/RVC.json 中,其中明确配置了 F0 检测器候选列表(dio / harvest / crepe)与 InputChunk 候选数值列表(8 到 2048 的 128 采样倍数)。
四、快速开始:选择设备并启动变声
启动后即可使用已下载的数据立即进行变声。在下图的 (1) 处选择麦克风与扬声器,然后按下 (2) 处的启动按钮。等待数秒数据加载后,变声即开始。
对于不熟悉操作的用户,建议在 (1) 处选择client device(客户端设备模式)来指定麦克风和扬声器(server device 模式的差异将在后文说明)。
五、GUI 布局与可折叠分区
通过 GUI 可配置的项目按下图所示分为若干分区。点击各分区标题即可展开 / 收起该分区。整体对应前端目录client/demo/src/components/demo/components2/下的101-3_SpeakerArea.tsx(音区设置)、101-2_IndexArea.tsx(索引/特征)、102-1_QualityArea.tsx(音质)、102-3_DeviceArea.tsx(设备)等组件,每个分区都是独立的配置单元。
六、标题栏与全局操作
标题栏上的图标均为链接:
| 图标 | 作用 |
|---|---|
| Octocat(GitHub 图标) | 跳转 GitHub 仓库 |
| question(问号图标) | 打开使用手册 |
| spanner(扳手图标) | 工具 |
| coffee(咖啡图标) | 捐赠支持 |
此外标题栏还提供三个全局按钮:
- clear setting:初始化全部配置,将参数恢复到默认状态。
- reload:重新加载窗口。
- re-select vc:返回 Launcher 启动器界面,可重新选择其他变声引擎。
七、Server Control(服务器控制)
start / stop
start启动服务器,stop停止服务器。实时变声的启停均由这里控制。
monitor(实时状态监视)
显示实时转换的状态,关键指标有三个:
- vol:变声后的音量。
- buf:单次截取音频片段的长度(毫秒)。缩短 Input Chunk 可以降低该数值。
- res:对“Input Chunk + Extra Data Length”之和的数据进行转换所花费的时间。同时缩短 Input Chunk 与 Extra Data Length 可以降低该数值。
从发声到完成转换的延迟为buf + res秒。调节参数时应尽量保证 buf 时间大于 res 时间,以避免断音或卡顿。
需要注意:如果使用的是server device 模式,该监视画面不会在客户端显示,而是显示在服务器控制台一侧。
Switch Model(切换模型)
可以在已上传的模型中切换。模型名称下方的[]中显示该模型的信息,共 4 项:
- 模型是否考虑 f0(基频 / 音高):
f0:考虑音高(带 f0 模型);nof0:不考虑音高(无 f0 模型)。
- 训练该模型时使用的采样率。
- 模型使用的特征通道数(256 或 768)。
- 训练模型时使用的客户端:
org:使用 original-RVC 训练的模型;webui:使用 ddPn08-RVC 训练的模型。
从源码看,上述信息正是RVCModelSlotGenerator在加载时自动判别的结果:original-RVC v1 模型特征通道为 256、使用 HuBERT 第 9 层输出;v2 模型特征通道为 768、使用第 12 层输出且不使用 final projection;ddPn08-RVC 模型则读取检查点中的embedder_output_layer、embedder_name与speaker_info等字段(见 server/voice_changer/RVC/RVCModelSlotGenerator.py)。
Operation(模型与服务器操作)
- export onnx:导出 ONNX 模型。将 PyTorch 模型转换为 ONNX 模型有时可以提升推理速度。对应后端实现为
RVC.export2onnx(),导出后文件写入/tmp目录(见 server/voice_changer/RVC/RVC.py)。 - download:下载模型,主要用于获取模型融合(Lab)后的结果。
八、Model Setting(模型设置)
Model Slot
选择将模型放入哪个槽位(帧)。放入后,可在 Server Control 的 Switch Model 中切换使用。设置模型时可以选择“从文件加载”或“从网络下载”,两种方式的可用设置项不同:
- file:选择本地文件加载模型。
- from net:从互联网下载模型。
Model(.onnx 或 .pth)
仅在“从文件加载”时显示,为必填项。指定训练好的模型文件,支持 ONNX 格式(.onnx)与 PyTorch 格式(.pth):
- 使用 original-RVC 训练的模型位于
/logs/weights。 - 使用 ddPn08-RVC 训练的模型位于
/models/checkpoints。
加载时后端会按文件后缀判定是否为 ONNX(slotInfo.isONNX = slotInfo.modelFile.endswith(".onnx")),ONNX 模型通过读取模型元数据(metadata)中的embChannels、embOutputLayer、f0、samplingRate等字段完成识别(见 server/voice_changer/RVC/RVCModelSlotGenerator.py)。
index(.index)
仅在“从文件加载”时显示。这是将 HuBERT 提取的特征拉近训练数据的附加功能,需要与特征文件(.npy)成对使用:
- 使用 original-RVC 训练时位于
/logs/your-experiment-name/total_fea.npy。 - 使用 ddPn08-RVC 训练时位于
/models/checkpoints/your-model-name_index/your-model-name.0.big.npy。
从源码看,索引文件在管线创建时被加载为 Faiss 索引,并展开为big_npy全量特征矩阵供检索使用(见 server/voice_changer/RVC/pipeline/Pipeline.py)。
Select Model
选择“从网络下载”时显示的可下载模型列表。使用前请务必确认模型的许可条款(terms of use)链接。
Default Tune
输入变声默认音高偏移量。推理过程中也可以实时调整。设置参考值:
- 男声转女声:+12
- 女声转男声:-12
对应后端设置项tran,默认值为 12(见 server/voice_changer/RVC/RVCSettings.py),加载模型后由self.settings.tran = self.slotInfo.defaultTune写入(见 server/voice_changer/RVC/RVC.py)。
upload / select
- upload:完成上述文件类设置后,点击使模型进入可用状态。
- select:选择“从网络下载”并完成上方设置后,点击激活模型。
九、Speaker Setting(音区设置)
Tuning(音高微调)
调整自己声音的音高。设置参考值同样为:男声转女声 +12;女声转男声 -12。该值对应设置项tran,可在推理过程中随时修改。
index ratio(索引比率)
指定向“训练时使用的特征”偏移的比例。仅当 Model Setting 中同时设置了特征文件与索引文件时才有效:
- 0:完全使用 HuBERT 的输出。
- 1:完全还原为训练时的原始特征。
需要注意:index ratio 大于 0 时,每次转换都会执行特征检索,可能导致耗时变长。从源码看,只有当index is not None and big_npy is not None and index_rate != 0时才会执行 Faiss 检索,并以feats = retrieved * index_rate + (1 - index_rate) * feats的方式混合检索结果与原始特征(见 server/voice_changer/RVC/pipeline/Pipeline.py)。设置项indexRatio默认值为 0(见 server/voice_changer/RVC/RVCSettings.py)。
Silent Threshold(静音阈值)
音频转换的音量阈值。若输入 RMS 小于该值,则不进行变声转换,直接返回静音;此时转换流程被跳过,因此负载更低。从源码看,该判断位于推理入口:if vol < self.settings.silentThreshold: return np.zeros(convertSize) * np.sqrt(vol)(见 server/voice_changer/RVC/RVC.py)。对应设置项silentThreshold默认值为 0.00001(见 server/voice_changer/RVC/RVCSettings.py)。
补充说明:与silentThreshold同屏的还有一个源码级参数protect(默认 0.5),它控制音高估计失败时在“检索前特征”与“检索后特征”之间的混合比例,仅当protect < 0.5且启用索引检索时生效(见 server/voice_changer/RVC/pipeline/Pipeline.py)。
十、Converter Setting(转换器设置)
InputChunk Num(128 sample / chunk)
决定一次转换截取并处理多长的音频。数值越高转换效率越高,但 buf 值越大,转换开始前的最大等待时间越长(近似时间显示在buff:中)。GUI 中可选的候选值为 128 采样的整数倍:8、16、24、32、40、48、64、80、96、112、128、192、256、320、384、448、512、576、640、704、768、832、896、960、1024、2048(见 client/demo/public/assets/gui_settings/RVC.json)。
从源码看,单次转换的数据长度为inputSize + crossfadeSize + solaSearchFrame + extraConvertSize,且会向上取整对齐到 128 的整数倍(因为模型输出的 hop 尺寸会产生截断),见 server/voice_changer/RVC/RVC.py。其中crossfadeSize与solaSearchFrame用于前后片段的交叉淡化与波形相似对齐,以保证拼接平滑。
Extra Data Length
决定转换输入中包含多少“过去”的音频。过去的语音越长,转换精度越高,但 res 越长、计算耗时越大(由于 Transformer 是瓶颈,计算时间可能随该长度按平方增长)。对应后端设置项extraConvertSize,默认值为 1024 × 4 = 4096 个采样点(见 server/voice_changer/RVC/RVCSettings.py)。该值的详细讨论可查阅本项目 issue 追踪中的相关说明。
GPU
如果机器有 2 块或以上的 GPU,可在此选择推理所用的 GPU。对应设置项gpu(默认 -9999,表示自动选择),切换 GPU 时后端会重建整个推理管线(见 server/voice_changer/RVC/RVC.py)。
十一、Device Setting(设备设置)
在此选择client device 模式或server device 模式。只能在变声停止时进行切换。两种模式的详细说明请参见 tutorials/tutorial_device_mode_ja.md(该教程有对应的日文与韩文版本)。
- Audio Input:选择输入设备(麦克风)。
- Audio Output:选择输出终端(扬声器)。
output record(输出录音)
仅在 client device 模式下显示。从按下 start 到按下 stop 之间的音频会被录制下来。注意:按下该按钮并不会启动实时变声;实时变声的启停由 Server Control 控制。此功能在仓库前端中由录音器相关组件实现,对应独立子项目recorder/目录下的录音应用。
十二、Lab(实验室:模型融合)
可在此进行模型融合(model merging)。为每个源模型设置成分比例(component amounts),系统会按照各模型成分比例合成一个新的模型。
从源码看,融合逻辑位于 server/voice_changer/RVC/modelMerger/MergeModel.py:加载各槽位的模型权重(torch.load),剔除enc_q编码器相关键后按strength归一化比例加权求和,并校验各模型权重键集合完全一致(不一致会直接报错Failed to merge models.),最终输出融合后的新模型权重文件。
十三、Quality Control(音质控制)
Noise Suppression(降噪)
浏览器内置降噪功能的开 / 关。开启后会在客户端侧先对输入麦克风信号进行噪声抑制,再送入服务器。
Gain Control(增益控制)
- input:增大或减小输入到模型的音频音量,1 为默认值。
- output:增大或减小模型输出音频的音量,1 为默认值。
F0Detector(基频检测算法)
选择提取音高的算法,GUI 中提供以下三种:
dio:轻量级,速度快,适合低延迟场景。harvest:高精度,适合对音高准确性要求高的场景。crepe:使用 GPU 的中等精度方案。
从源码看,以上候选列表定义在 client/demo/public/assets/gui_settings/RVC.json 中;而后端的检测器工厂 server/voice_changer/RVC/pitchExtractor/PitchExtractorManager.py 实际支持的算法更丰富,除dio / harvest / crepe外还包括crepe_tiny、crepe_full、rmvpe、rmvpe_onnx、fcpe,未知类型会回退到dio。切换 F0 检测器时,后端会动态替换管线中的检测器实例而不必重建整个管线(见 server/voice_changer/RVC/RVC.py)。另需注意:后端RVCSettings中f0Detector的默认值是rmvpe_onnx(见 server/voice_changer/RVC/RVCSettings.py),与 GUI 下拉列表的默认项可能不同,实际生效值以后端设置为准。
Analyzer(实验性功能)
在服务器侧录制输入与输出:
- 输入:麦克风声音原样发送到服务器并录制。可用于检查从麦克风到服务器的通信链路是否正常。
- 输出:模型输出的数据在服务器侧录制。在确认输入正常后,可用于观察模型的实际表现。
十四、底层原理:一次实时变声的完整调用链
结合源码可以把一次实时变声拆解为如下流水线(对应 server/voice_changer/RVC/pipeline/Pipeline.py 的exec流程):
- 输入缓冲与预处理:客户端按 InputChunk 大小发送音频,后端将新数据与历史缓冲区拼接,并对齐到 128 采样整数倍,同时计算本段音量(RMS)用于静音判断(见 server/voice_changer/RVC/RVC.py)。
- 重采样到 16 kHz:RVC 模型内部世界以 16 kHz 处理,音频从模型采样率(如 48 kHz)重采样至 16 kHz(
torchaudio.functional.resample)。 - 音高提取:若模型为 f0 类型,使用所选检测器(dio / harvest / crepe / rmvpe 等)提取基频
pitch / pitchf,并按f0_up_key(即 Tuning / Default Tune)进行音高偏移。 - 特征提取:由嵌入器(HuBERT 系列,
embedder)从音频中提取语义特征,输出层与通道数由模型槽信息决定(v1:第 9 层 256 通道;v2:第 12 层 768 通道)。 - 索引检索:当配置了 index 且
indexRatio > 0时,用 Faiss 检索最相似训练特征并混合(同时根据protect调整混合比例)。 - 推理:将特征与音高输入 RVC 推理器(
inferencer,支持 PyTorch 与 ONNX 后端),输出目标采样率(模型采样率)的音频。 - 后处理:裁掉用于 quality padding 的填充段,乘以音量系数(
vol的平方根)恢复响度,返回给客户端播放。
上述整条链路中,buf对应步骤 1 的缓冲等待,res对应步骤 2~7 的计算耗时,因此总延迟 ≈buf + res;想压低延迟,就要同时控制 InputChunk(影响 buf)与 Extra Data Length(影响 res),并优先保证buf > res以避免音频断裂。
十五、总结与延伸阅读
至此,你已经掌握了 voice-changer RVC 客户端从启动、加载模型到各分区参数调优的完整流程:先通过 Launcher 进入 RVC 引擎,在 Model Setting 中上传模型(.pth / .onnx)与索引(.index),在 Speaker Setting 中调整音高与索引比率,在 Converter Setting 中平衡延迟与精度,再配合 Device Setting 选择设备模式,即可获得稳定的实时变声体验。需要更深入地排查问题时,可以使用 Quality Control 的 Analyzer 在服务器侧录制输入输出,定位是通信链路问题还是模型行为问题。
本文是 RVC 教程系列(v1.5.3.3)的一篇,更新的版本内容可参考 tutorial_rvc_en_latest.md;设备模式(client device / server device)的详细对比见 tutorials/tutorial_device_mode_ja.md。GUI 界面定义与可选项配置见 client/demo/public/assets/gui_settings/RVC.json,后端全部参数默认值见 server/voice_changer/RVC/RVCSettings.py,推理实现见 server/voice_changer/RVC/RVC.py 与 server/voice_changer/RVC/pipeline/Pipeline.py。
- 人工智能
- 语音
- 模型推理服务
- 深度学习
【免费下载链接】voice-changer
リアルタイムボイスチェンジャー Realtime Voice Changer
相关推荐
OpenObserve 前端字体本地化托管指南:Geist 字体打包、许可合规与重新引入(Re-vendoring)实践
OpenObserve 前端字体本地化托管指南:Geist 字体打包、许可合规与重新引入(Re vendoring)实践 本篇技术指南以 OpenObserve
人工智能语音模型推理服务深度学习Reflex + Plotly 完整实战指南:用纯 Python 在 Web 应用中渲染交互式图表
Reflex + Plotly 完整实战指南:用纯 Python 在 Web 应用中渲染交互式图表 导读 Plotly 是 Python 生态中最流行的交互式图
人工智能语音模型推理服务深度学习Realtime Voice Changer完整教程:从零开始掌握RVC实时语音转换
Realtime Voice Changer完整教程:从零开始掌握RVC实时语音转换 想要轻松实现声音变身吗?🎙️ Realtime Voice Change
人工智能语音模型推理服务深度学习
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考