VCClient 实时语音变声上手指南:从 Edition 选型到自定义客户端接入
VCClient 实时语音变声上手指南:从 Edition 选型到自定义客户端接入
【免费下载链接】voice-changerリアルタイムボイスチェンジャー Realtime Voice Changer项目地址: https://gitcode.com/gh_mirrors/vo/voice-changer
VCClient 是一款基于 AI 的实时语音变声工具:你对着麦克风说话,它就边说边把你的声音转换成目标角色的音色,延迟低到可以直接用在游戏开黑、直播和语音聊天里。这篇文章面向刚接触这个项目的开发者,带你按上手的顺序把三件事理清楚——先选对 edition 和模型,再挑一条落地路径跑起来,最后拆开实时推理管线看看延迟到底是怎么省出来的,顺带给你留好二次开发的入口。
🧭 先选 Edition 再装软件:要跑什么模型,决定你怎么下
当前主线版本是 v2.2.2-beta。从 v2.2.1 开始有一个必须先搞清楚的变化:edition 决定你能跑哪些模型,而且不同版本发布的 edition 还可能不一样。所以选型的第一步不是看系统,而是看你手里要跑的模型。决策结论可以直接背下来:
- 只用 Beatrice → std 版,依赖最轻;
- 要跑 RVC、手里有 NVIDIA 卡 → cuda 版(目前仅 Win);
- 要跑 RVC、但机器没有 CUDA(典型如 M1 Mac)→ onnx 版,走 ONNX Runtime。
| Edition | 可运行平台 | 能跑的模型 |
|---|---|---|
| std | Win、macOS(M1)、Linux x86-64、Linux aarch64 | 仅 Beatrice |
| cuda | Win | Beatrice + RVC |
| onnx | Win、macOS(M1) | Beatrice + RVC |
再补几条版本动态,方便你对齐手里的发行版:v2.2.2-beta 发布 std(win / mac / linux_aarch64),并首次支持 Beatrice v2.0.0-rc0;v2.1.3-alpha 加了快捷键和缓冲可视化,目前仅 RVC 支持;v2.0.78-beta 修复了 RVC 模型上传报错、支持 v1.x 与 v2 同时启动、可选 chunk size 变多;v2.0.76-beta 给 Beatrice 加了话者合并与自动音高平移;v2.0.73-beta 支持下载编辑后的 Beatrice 模型,并修了 Applio embedder 模型无法导出 ONNX 的问题。另有一个仅面向 RTX 5090 的实验性 v2.0.77-beta,作者没有 5090 硬件,未实际验证,介意的话避开。
模型支持是分代看的:RVC 是 v2 主线核心,v1/v2 世代都支持;Beatrice 分两代——v1 只在 v1 世代支持且仅限 Windows,v2 则只属于 v2 世代;MMVC、so-vits-svc、DDSP-SVC 全部是 v1 世代的老成员,只由旧版封装驱动。许可证方面,RVC、MMVC、so-vits-svc、DDSP-SVC 都以各自原仓库为准,Beatrice 两代均使用自有许可。
三条落地路径:下载、Clone 与 Docker
按你的操作系统对号入座就行:
- Windows 与 M1 Mac:从 Hugging Face 仓库直接下发行版,主仓库是
wok000/vcclient000;如果你只用 Beatrice v2,还有更小的轻量仓库light_vcclient_beatrice。 - Linux:官方明确走 clone 自运行路线,克隆仓库后自行搭建:
git clone https://gitcode.com/gh_mirrors/vo/voice-changer。 - Docker 容器化:仓库内备了三套目录——
docker/面向服务端、docker_vcclient/面向客户端(内含 exec.sh、setup.sh 与多语言说明)、docker_trainer/面向模型训练,按需挑用。
三条路之外没有别的官方入口,Colab 用户可参考仓库根目录的几个 notebook(以仓库 README 为准)。
本地直跑还是远程卸载:推理负载落在哪台机器
这两种形态跑的是同一套服务端,差异只在传输层。本地形态下,采集、推理、回放全在同一台 PC 完成,客户端与服务端在进程内直连;远程形态下,你这台机器只负责麦克风采集和结果播放,音频流通过网络发到另一台机器上做推理。
为什么游戏场景更值得用远程?因为变声推理(尤其是 GPU 上的 RVC 管线)和游戏抢的是同一份算力。把推理卸到外置机器后,本地 GPU 整个让给游戏,AI 那部分开销由服务器兜底。对应到代码里,设备管理在server/voice_changer/Local/,对外暴露的 REST 与 Socket.IO 接口就是网络形态的接入点。
⚡ 一行 emit 打通实时推流:REST 与 Socket.IO
服务端提供 REST API 意味着任何语言、甚至系统自带的 curl 都能当客户端用。核心接口是POST /test(实现在 server/restapi/MMVC_Rest_VoiceChanger.py):请求体就两个字段——timestamp和buffer(base64 编码的 16 位 PCM),服务端解包成 int16 数组后送去changeVoice()推理,回包是timestamp加changedVoiceBase64(base64 的变声结果)。适合批处理、文件转文件这类对实时性不苛刻的调用。
低延迟实时场景走 Socket.IO,仓库自带一份完整可跑的参考实现 client/python/vc_client.py,核心循环很短:PyAudio 按 44100 Hz、单声道、int16 从麦克风读数据,每次读BUFFER_SIZE = 2048 * 2 * 10字节,然后向/test命名空间发一条消息:
sio.emit('request_message', [time.time() * 1000, in_wav], namespace="/test")on_response回调收到[timestamp, data, perf],用当前时间减去 timestamp 就是往返时延 RT;示例里把结果乘了GAIN = 10的增益再写回输出设备。手上没有音频设备时,把输入输出换成内置的MockStream从 wav 文件读写,就能离线调试协议。
延迟从哪省出来的:实时管线拆解
先看 V2 分层设计(server/voice_changer/VoiceChangerV2.py 的文件头注释把与 v1 的差异写得很直白):一是重采样逻辑下放给模型的setSamplingRate(),上层不再做无效换算;二是废掉"预处理/主处理"的拆分,省掉模型内部没必要的数组类型转换。另外on_request()承担着一套"fail-silent"降级:模型未加载、ONNX 在等合法输入、半精度切换中、f0 估计数据不足、设备切换或管线还没建好,统统返回静音占位并打警告,保证实时音频流不断。
RVC 的推理链在RVCr2+Pipeline里,共四步:
- 特征提取:16 kHz 重采样后的音频送入 Hubert / ContentVec / Whisper 等 embedder,取出与音色无关的内容特征;
- 基频检测:rmvpe、crepe、harvest、dio 任选,
tran控制半音级别的音高平移; - 索引检索:faiss 索引先
reconstruct_n预载全部特征,再用search按indexRatio做权重混合——RVC 名字里的 Retrieval 就体现在这;protect < 0.5时还会对弱 f0 区域做保护; - 合成输出:融合后的特征进 v2/v3 合成器,乘 32767.5 转回 int16,裁掉前后 padding 即出音。
管线还内置半精度回退:GPU 不支持 half 时会抛DeviceCannotSupportHalfPrecisionException,上层捕获后自动切回 float 重新初始化,你不需要手动处理。
拼接环节用的是分块 + SOLA 交叉淡化(SOLA:用滑动窗口找最佳叠加点,消掉分块拼接时的咔嗒声)。交叉淡化从块内 10% 位置开始、90% 位置结束,重叠 4096 帧;Beatrice 则通过noCrossFade = True直接跳过这一步,进一步压延迟。
RVC 的核心可调参数如下(定义见 server/voice_changer/RVC/RVCSettings.py):
| 参数 | 默认值 | 含义 |
|---|---|---|
| gpu | -9999 | GPU 设备号,-9999 表示自动/CPU |
| dstId | 0 | 目标话者 ID |
| f0Detector | rmvpe_onnx | 基频检测算法(dio / harvest / rmvpe / crepe 等) |
| tran | 12 | 音高平移(半音),12 = 升一个八度 |
| silentThreshold | 0.00001 | 静音阈值,音量低于此值直接出静音 |
| extraConvertSize | 4096(1024×4) | 额外上下文缓冲 |
| indexRatio | 0 | 索引特征混合比例,0 = 不用索引 |
| protect | 0.5 | 检索保护,<0.5 时保护弱 f0 区域 |
| rvcQuality | 0 | 高质量模式开关(0/1) |
| silenceFront | 1 | 静音前置,0 关 / 1 开 |
注意tran、indexRatio、protect同时也是模型槽的出厂默认字段,RVCr2.initialize()会先读模型的默认值,再由运行时设置覆盖,模型自带默认和你的实时微调互不冲突。
排坑清单:签名警告、素材许可与通信故障
- macOS 首次启动:软件没有 Apple 开发者签名,弹出安全警告时按住 Control 键再点图标即可运行,这是 Apple 安全策略所致,运行风险自负;
- 内置音色素材:各有自己的条款。つくよみちゃん语音禁止用于攻击批判他人、鼓动特定政治/宗教立场、无分级发布刺激内容、以及允许他人二次利用(作为鉴赏作品的分发销售没问题);あみたろ的素材允许做变声音色,但必须明示"是声质转换、并非本人发声",且内容不得越出素材条款范围;黄琴まひろ遵循其素材库条款。具体细则以 README 引用的原条款为准;
- 通信类故障:优先查"通信编"排障文档 tutorials/trouble_shoot_communication_ja.md(另有韩语版),
tutorials/下还有 RVC 各版本使用教程与设备模式、监听概念的专题文档可作补充; - 免责声明:因使用或无法使用本软件产生的直接、间接、波及或特殊损害,作者概不负责。
同生态软件与二次开发入口
同一位开发者还维护 TTSClient(AI 朗读,文本转语音)和 ASRClient(实时语音识别),三者拼起来正好是"语音输入 → 识别/合成 → 变声"的完整工具链。想动手改的话,入口很清晰:server/voice_changer/下是各模型的完整实现——RVC、Beatrice 等 V2 世代统一跑在 VoiceChangerV2 上,MMVC、so-vits-svc、DDSP-SVC 等 V1 世代走旧的 VoiceChanger 封装;client/python/vc_client.py则是协议层的可直接运行参照。把 edition 选对、把传输层接上,实时变声这套能力就是你的了。
【免费下载链接】voice-changerリアルタイムボイスチェンジャー Realtime Voice Changer项目地址: https://gitcode.com/gh_mirrors/vo/voice-changer
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考