实时变声
实时 页面把麦克风里的声音即时转换成所选音色,再送到耳机、扬声器或虚拟声卡(例如给直播、语音聊天软件使用)。整个页面从上到下分成三块:音频设备、音色与参数、缓冲与降噪,底部固定着 开始 / 停止 按钮和状态栏。
实时转换跑在一个独立的后台进程里,和服务器、转换任务互不干扰;它打开的是服务器所在电脑上的声卡,而不是你正在用的浏览器所在的设备。
页面显示“此服务器暂不支持实时转换。”
说明服务器的 Python 环境里没有安装 sounddevice(PortAudio 的 Python 封装)。在 Linux 上还需要系统级的 libportaudio2。安装方法见 安装。
快速上手
- 打开左侧导航的 实时。
- 在 音频设备 区域选好 输入(麦克风)和 输出(耳机;要在 Discord、OBS 等程序中使用,选虚拟声卡,见 在其他程序中使用实时变声)。对着麦克风说话,输入电平 表应该会跳动;点 输出 旁边的 测试,应能听到一声提示音。
- 在 音色 选择器里选一个音色,按需调整 音色参数(例如男声转女声把 音高 调到 +12 左右)。
- 第一次使用时,开始按钮的位置可能显示 需要 … 和 下载(大小) 按钮:实时转换总是需要 HuBERT;音色有音高引导、且音高算法选的是 RMVPE、FCPE 或 CREPE 时,还需要对应的模型(pm 和 SwiftF0 不需要额外下载)。点下载,完成后按钮会恢复。
- 点底部的 开始。按钮会依次显示正在进行的每一步(检查音频设备,加载 PyTorch、音色和模型,然后 正在预热…),进入 运行中 后即可开口说话。
- 结束时点 停止。
下次打开页面时,上一次的设备、音色、参数和缓冲设置都会自动恢复,直接点 开始 即可。
使用本浏览器的麦克风
页面顶部的 服务器设备 和 本浏览器 决定声音从哪里来、到哪里去。本浏览器 使用打开网页的设备的麦克风和扬声器——例如用笔记本或手机连接另一台电脑上的 rvc-next,或者服务器根本没有声卡(这时只有这一个选项):浏览器通过 WebSocket 把麦克风发送到服务器,并从一个小的抖动缓冲中播放转换后的声音(60 ms,断音后重新缓冲;积压超过 250 ms 的部分会被丢弃)。
- 第一次点 开始 时浏览器会请求麦克风权限,请允许。浏览器自带的回声消除、降噪和自动增益会被关闭,因为它们会干扰转换——请戴耳机。
- 会话以浏览器的音频采样率运行(通常是 48 或 44.1 kHz)。音色、参数、缓冲、效果、增益(来自 设置 › 音频)和录音与服务器设备相同;监听、输入电平表和 测试 只属于服务器设备。
- 实际延迟是显示的延迟,加上网络往返时间和 60 ms 缓冲。同一场所的有线或良好 Wi-Fi 网络能让它保持较小;标题下的一行显示缓冲和断音次数。
- 浏览器只允许 HTTPS 页面或
localhost使用麦克风;配置 HTTPS 见远程访问。 - 关闭标签页,或连接中断 3 秒,会话就会停止。同一时间只能连接一个浏览器:后连接的会接管。
音频设备
设备面板的标题是 {主机名} 上的音频设备,提醒你这些是服务器那台电脑的设备。如果你是从另一台电脑远程打开网页,面板会额外提示:这些设备属于服务器所在的电脑,而不是此浏览器。 右上角的 刷新设备 按钮会重新扫描设备;停止状态下页面可见时,也会每 5 秒自动刷新一次。
同一个设备面板也出现在 设置 › 音频 中,两处改的是同一份设置。
输入、输出与监听
| 项目 | 作用 |
|---|---|
| 输入 | 麦克风。只要设备面板显示着,下方的 输入电平 表就实时显示音量:第一次 开始 之前、会话运行中、停止之后(包括出错停止)都是如此。电平表在后台打开,页面不会等它;麦克风被拔出或被占用时,可用后会自动恢复。可在 设置 › 音频 › 停止时显示输入电平 中关闭。 |
| 输出 | 转换后的声音送往这里。下方的 输出电平 显示 rvc-next 送往该设备的声音(转换后的声音,或 监听自己 时的输入),没有声音时显示 —。旁边的 测试 按钮会在该设备上播放一段提示音。要把声音交给其他程序,请选择虚拟声卡的播放端(在其他程序中使用实时变声);要转换某台输出设备播放的声音,见 录制输出设备。 |
| 监听 | 可选的第二个输出,默认 不监听。适合“输出给虚拟声卡、自己用耳机听”的场景。选了监听设备后会出现 监听电平 表、测试 按钮,以及: |
| 监听内容 | 转换后 / 输入 / 两者(原声与转换后的声音叠加) |
| 监听音量 | −60 ~ +12 dB,默认 0 dB |
设备菜单的排列规则:
- 每台设备占一整行,菜单展开后和这一行一样宽,长名称会换行而不会被截断。名称下方还有一行说明:推荐的驱动、声道数和默认采样率。
- 服务器还在列出设备时(需要一点时间,安装的驱动较多时更久),每个菜单显示 正在查找音频设备…。
- 列表较长时(九项或以上,Windows 上很常见),顶部有搜索框。
- 第一项总是 系统默认:跟随操作系统当前的默认设备。
- 接着是系统默认的那台设备(带 默认 标签),然后按名称排序;虚拟声卡带 虚拟 标签。
- 菜单里每一项是一台物理设备,显示完整名称。Windows 上同一个麦克风会同时出现在 MME、DirectSound、WASAPI 等多个驱动下,rvc-next 会把它们合并成一项,并自动选择推荐的驱动(Windows 上依次偏好 ASIO、WASAPI、WDM-KS、DirectSound、MME;Linux 上依次是 JACK、ALSA、PulseAudio;大多数 Linux 发行版自带的 PortAudio 没有 PulseAudio 驱动,PulseAudio 和 PipeWire 以 ALSA 设备 pulse、pipewire、default 的形式出现)。
- 之前保存、但现在没连接的设备仍会以灰色显示,并带 未连接 标签。
录制输出设备(内录)
想转换电脑播放的声音而不是麦克风(视频、游戏、通话等),打开 设置 › 音频 › 把输出设备当作输入(内录)。输入菜单里就会同时列出所有输出设备,带 内录 标签;选中其中一台,它播放的声音就成为输入。
| 系统 | 录制方式 | 说明 |
|---|---|---|
| Windows | WASAPI 环回 | 任何输出设备、任何采样率都可以;没有声音播放时得到的是静音 |
| Linux | 每个输出在 PulseAudio/PipeWire 里的监视器(“Monitor of …”) | 需要正在运行的 PulseAudio 或 PipeWire(pipewire-pulse) |
| macOS | 仅靠系统无法录制 | 安装 BlackHole 等环回驱动,把声音送到它,再把它的输入(普通输入设备)选为输入 |
无法录制时,设备面板会说明原因。转换后的声音要送到另一台设备(耳机,或给其他程序用的虚拟声卡):如果录制的正是播放转换声音的那台输出,声音会被反复录回去,rvc-next 会拒绝(会录到自己的输出)。关闭该设置后,这些输入会再次隐藏。
输入设备无法“播放进去”,所以输出菜单只列输出设备。要把转换后的声音交给其他程序,请把虚拟声卡的播放端(例如 CABLE Input)选为输出,其他程序录制它的录音端(CABLE Output)。在其他程序中使用实时变声 分步讲解了 Windows、macOS 和 Linux 上的设置。
监听自己
监听自己 开关会把输入的原声直接送到监听设备(没有设置监听设备时送到输出),用来检查“麦克风 → 耳机”这条路由是否通畅。
- 停止状态下打开:只做直通,不加载音色。
- 运行中打开:设置了监听设备时,监听设备听到原声、输出仍是转换后的声音;没有设置监听设备时,输出会直接变成原声(相当于临时绕过转换)。
高级
展开 高级 可以看到:
| 项目 | 说明 |
|---|---|
| 输入 · 驱动 / 输出 · 驱动 | 同一台物理设备有多个驱动(host API)时才显示,推荐项标为 …(推荐)。 |
| 输入 · 声道 / 输出 · 声道 | 输入的所选声道混成单声道;输出把声音写到所选声道。默认项 默认(声道 1)(输入)/ 默认(声道 1+2)(输出,单声道设备为声道 1),也可选 声道 N 或 混合 1+2。 |
| 采样率 | 自动(默认)或设备支持的固定采样率。自动时使用输出设备的默认采样率(不支持时用 48 kHz)。 |
| 独占模式(WASAPI) | 仅当输出走 WASAPI 驱动时显示。独占模式可以降低延迟,但会让其他程序无法同时使用该设备。 |
| 输入音量 | −24 ~ +24 dB,默认 0 dB,在输入被测量电平和转换之前作用:调高声音小的麦克风,或调低过响的。 |
| 输出音量 | −60 ~ +12 dB,默认 0 dB,作用于送往输出设备的转换结果。 |
运行中修改音量(或监听的来源)会从下一块开始生效,不会重新打开设备。
多通道声卡
默认时输入只读取第 1 声道。如果你的麦克风接在声卡的第 2 声道(常见于多通道声卡),请明确选择 声道 2 或 混合 1+2。
面板底部有一行状态,例如 48 kHz · 单个双工流 · 估计延迟 640 毫秒:
- 单个双工流:输入和输出走同一个驱动、同一个采样率,用一个流同时收发,延迟最低。
- 分离的输入输出流:两者无法合成一个流(驱动或采样率不同),中间多一个缓冲区,延迟会多出一个块长。
测量真实延迟
估计值依赖驱动报告的延迟,而这个值往往偏乐观。状态行下方的 测量延迟 会实际测一次:
- 把输出接回输入:用音频线连接输出和输入、使用虚拟声卡自带的回环,或把扬声器靠近麦克风。
- 点击 测量延迟。几秒内,输出设备播放四段短噪声,输入设备同时监听。测量时实时变声必须已停止(监听自己 也要关闭),输入电平表会暂停。
- 结果类似:
实测延迟 620 毫秒:经过设备的往返 560 毫秒 + 转换 60 毫秒(估计 580 毫秒)。
往返 是实测值:测试噪声经过实时变声所用的同一组缓冲(输出预填充、设备双向的缓冲、音频线或空气)。转换 部分是转换器自身的延迟(交叉淡化 + 10 ms,开启输入降噪时再加 min(交叉淡化, 40 ms)),只取决于设置,因此是计算值;SOLA 每块最多会让它少 10 ms。只要没有欠载,推理耗时不会增加延迟。
只要输入、输出和块长不变,测量结果就一直有效。用这些设置运行时,状态栏会在估计值旁显示 实测 N 毫秒,顶栏的实时变声标签也改用实测值。改交叉淡化或降噪只会重新计算转换部分;换设备或改块长会清除测量结果。
如果没有检测到返回的噪声,面板会提示:检查连接并调高音量。如果各段噪声返回的时间不一致(断音,或两个设备之间时钟漂移),请加大块长,或让输入输出使用同一驱动。用扬声器和麦克风测量时,结果包含声音在空气中传播的时间(约每米 3 毫秒)。
设备问题与修复按钮
每次修改设备,rvc-next 都会在后台实际尝试按当前配置打开设备:先让驱动检查设置,实时转换停止时还会把输出和监听设备真正运行片刻(输入设备本来就为 输入电平 表打开着)。所以问题会在点 开始 之前就显示在对应设备下方,测试 声音或 监听自己 失败时也一样。问题格式为 原因:服务器给出的说明(说明文字来自服务器,为英文,会写出设备名称):
| 原因 | 含义 | 处理方式 |
|---|---|---|
| 未连接 | 找不到该设备 | 提示 选择其他设备:在菜单里换一个 |
| 被其他程序占用 | 设备正被别的程序使用 | 若开着独占模式,会出现 关闭独占模式 按钮;否则提示 选择其他设备 |
| 会录到自己的输出 | 输入录制的正是播放转换声音的输出(或监听)设备 | 提示 选择其他设备:换一个输入或输出 |
| 不支持此声道数 | 驱动不肯以这个声道数打开设备(rvc-next 已经选用设备报告可用的声道数,出现这一条通常是开了独占模式或设备有了变化) | 若开着独占模式,会出现 关闭独占模式 按钮;否则提示 选择其他设备(同一设备换个驱动通常就行) |
| 不支持此格式 | 设备拒绝当前采样率 | 点 使用 48 kHz 按钮 |
| 启动后立即停止 | 驱动接受了设置,但音频流一运行就被结束(设备被禁用或已断开、被其他程序独占,或驱动故障) | 提示 选择其他设备(同一设备换个驱动常常可行);开着独占模式时出现 关闭独占模式 |
| 麦克风权限被拒绝 | 系统没有授予麦克风权限 | 提示 如何授予权限:在系统的隐私设置中允许 |
| 回退到默认设备 | 保存的设备不在了,将改用系统默认设备 | 提示 选择其他设备 |
设备下方还可能出现一行提示,说明保存的设备是怎样被重新找到的,例如 在另一个驱动下找到了 {设备名}。(换了驱动但还是同一台设备),或 未找到 {设备名}:使用系统默认设备。
输出设备不见了怎么办
点 开始 时,如果保存的输出设备已经不存在,而系统默认设备可用,rvc-next 不会悄悄把声音送到默认设备(那可能是你的外放扬声器),而是弹出确认框:保存的输出设备不存在,将使用系统默认设备。 只有点 使用默认输出启动 才会继续。输入或监听设备完全找不到时,则直接报错,需要先换一个设备。
音色与参数
中间一块是 音色 选择器和 音色参数 面板,和 转换 页面用的是同一套控件,含义见 音色参数。在实时页面上:
- 参数面板上方会提示 拖动时即时生效。:运行中拖动 音高、共振峰、索引强度、辅音保护、响度匹配 滑块,或切换 音高算法,都会立刻作用到正在转换的声音上,不会中断。
- 切换到一个尚未下载的音高模型时,会继续使用当前的算法并提示缺少的模型。
- 切换音色是热切换:新音色在后台加载,旧音色继续转换,加载完成后在两个块之间无缝切过去,HuBERT 和音高模型保持加载。新音色加载失败时,会继续使用原来的音色,选择器也会退回原来的音色。
- 多说话人音色会显示 说话人 菜单,运行中也可以切换;换了音色后,说话人会回到新音色的第一个说话人。若该说话人有专属索引(
spk<N>),也会一并换上。 - 选择一个音色会载入它的默认预设;预设 按钮可以载入或保存预设,详见 音色参数。
缓冲与降噪
缓冲与降噪 区域控制声音如何分块送进模型。每个滑块的说明末尾会用 (+N ms) 标出它在估计延迟中所占的份额。
| 设置 | 范围(默认) | 作用 | 延迟份额 | 运行中修改 |
|---|---|---|---|---|
| 块长 | 20–1500 ms(250) | 每步处理的音频长度。越长越稳定,越短越快 | 2 × 块长 | 重新缓冲 |
| 交叉淡化 | 10–150 ms(50) | 块之间的重叠,使衔接平滑 | 等于交叉淡化 | 重新缓冲 |
| 上下文 | 50–5000 ms(2500) | 每个块附带给模型的过去音频。越多越平滑,耗时也越多 | 不增加延迟,但增加计算量 | 重新缓冲 |
| 输入门限 | −60–0 dB(−60) | 低于此电平的输入会被静音,−60 dB 为关闭 | 无 | 即时生效 |
| 输入降噪 | 开 / 关(关) | 转换前对输入降噪 | min(交叉淡化, 40 ms) | 即时生效 |
| 输出降噪 | 开 / 关(关) | 对转换结果降噪 | 无 | 即时生效 |
| 降噪强度 | 0–1(0.9) | 开启任一降噪时显示:噪声被压低多少;1 去除最多,也可能带走一些人声 | 无 | 即时生效 |
| 相位声码器交叉淡化 | 开 / 关(关) | 用相位声码器(来自 RVC 后来的实时界面,Applio 也采用)代替普通交叉淡化拼接各块:当相邻两块以不同相位渲染同一个声音时,普通交叉淡化在拼接中间会出现音量下陷,这种方式不会 | 无 | 即时生效 |
“重新缓冲”是指:运行中修改块长、交叉淡化或上下文时,音频流会被关闭并按新的缓冲区重新打开,会有一次短暂的中断,但音色不会重新加载。
估计延迟是怎么算的
估计延迟 ≈ 块长 + 交叉淡化 + 10 ms(拼接搜索)+ 块长(输出端预填充)+ 设备自身的输入、输出延迟;分离的输入输出流再加一个块长;开启输入降噪再加 min(交叉淡化, 40 ms)。默认设置(块长 250 ms、交叉淡化 50 ms)在双工流下约为 560 ms 加上设备延迟。
停止状态下修改缓冲设置会直接保存到设置里;运行中修改则立即发给正在运行的会话,同样会被记住。
效果
缓冲设置下方的 效果 与转换页上的效果链相同(效果),作用于每个转换好的块,再播放出去;混响的尾音和压缩器的包络会在块之间延续。修改从下一个块起生效,不需要重新缓冲,并与其他实时变声设置一起保存;监听自己 直通输入时不经过效果。这里不提供 变调:在实时流中,pedalboard 的变调会压住约一秒的音频;请用音色的 音高。
开始、停止与状态栏
页面底部固定着一条栏:
- 开始 / 停止 按钮。从点击的那一刻起,按钮上依次显示启动的每一步:正在检查音频设备…、正在启动实时进程…(仅首次启动)、正在加载 PyTorch 和计算设备…(仅首次启动)、正在加载音色…、正在加载索引…、正在加载 HuBERT…、正在加载音高模型…、正在预热…;无需执行的步骤会跳过。停止过程中显示 正在停止…。没有选音色时按钮不可用,并提示 选择一个音色以开始。
- 出错时,按钮上方会显示错误说明(因错误停止),一直保留到下一次 开始,或点它的 × 按钮关闭。
- 音频设备出问题时会指明是哪一个:输入设备不可用、输出设备不可用 或 监听设备不可用,后面是原因(被其他程序占用、未连接、不支持此格式…)和设备名称,例如 The output device “Speakers (Realtek)” is in use by another program, or refused to open: …。输入和输出共用一个音频流、又无法判断是哪一个时,消息会同时列出两者。
- 实时进程本身退出时(驱动或 GPU 库崩溃、系统内存耗尽等),标题为 后台进程意外退出,消息说明它是如何结束的(退出代码或信号),输出中有线索时也会给出原因。
- 详情 逐项列出所有字段(设备、驱动、驱动自己的消息、异常、退出代码…),调用栈和进程最后的输出完整显示。复制 会把这些内容复制为文本,可直接贴到问题反馈里。
状态栏每秒更新 10 次,包括:
| 内容 | 说明 |
|---|---|
| 输入 / 输出 电平表 | 输入与转换后输出的音量(RMS 与峰值) |
| 负载 | 推理耗时(最近 50 块的第 95 百分位;不足 10 块时取中位数)÷ 块长。超过 80% 时进度条变成警示色,表示模型快跟不上实时了;超过 100% 时显示 >100%,输出会断音。某一块晚了时,会话会跳过过时的输入并裁掉输出缓冲里多出的部分,延迟不会因此一直增加 |
| 将块长增加到 N 毫秒 | 负载过高时出现。按最近推理耗时的 95 分位估算一个能让负载回到约 70% 的块长(上限 1500 ms),点一下即应用 |
| 延迟 N ms | 当前的估计端到端延迟 |
| 实测 N 毫秒 | 实测延迟,当测量结果与本次会话的设备和块长相符时显示 |
| N 次欠载 / N 次溢出 | 输出缓冲用空了(会听到断续)/ 输入缓冲溢出的次数,只在发生过时显示 |
| GPU N MB | 实时进程占用的显存 |
录音
实时变声运行时,开始按钮旁的 录音 会把会话写成输出文件夹里的 WAV 文件(<日期>/live/)。可以选择保留什么:
| 选项 | 文件 |
|---|---|
| 变声与输入(立体声) | 左声道是输入,右声道是变声结果:便于对比,或之后单独编辑其中之一 |
| 仅变声 | 只有变声结果,单声道 |
| 仅输入 | 只有你的输入,单声道(经过 输入音量) |
之后按钮显示 停止录音 · 0:12。录音在你停止它、实时变声停止或采样率改变时结束,随后出现在实时页的 录音 一节和所有输出列表中,并记录所用的音色和参数。录音不在音频线程上进行,不会让任何一块变晚。输出音量和监听音量不作用于录音。
顶栏的实时标签
会话处于活动状态时(运行中、加载中、重新连接中等),所有页面的顶栏都会显示一个实时标签,例如 实时 · 620 毫秒;加载等过程中则显示当前状态。点击标签回到 实时 页面,点它右侧的 按钮可以在任何页面直接停止。重新连接或出错时,标签会变成红色。
设备断开与自动重连
运行中拔掉耳机或 USB 麦克风时:
- 会话进入 正在重新连接设备… 状态,顶栏标签显示这一状态并变红;页面底部会说明断开的是哪个设备,例如 输出设备已断开 以及它的名称。
- 服务器每 2 秒重新扫描一次设备。
- 原设备重新出现(包括在另一个驱动下找到同一台设备)时,自动重新打开并回到 运行中,音色不需要重新加载。
这个行为由 设置 › 音频 › 自动重新连接丢失的设备 控制(默认开启)。关闭后,设备一旦断开,会话就直接停止,错误说明会指出断开的是哪个设备。
和其他任务一起使用 GPU
实时转换在 GPU 上运行时会占用 GPU:
- 此时排队的 GPU 任务(转换、分离、训练等)会显示 等待 GPU,并提供 仍然运行 按钮,提示 实时转换正在使用 GPU。同时运行可能导致声音卡顿。
- 实时会话活动时,顶栏的 释放显存 不可用。停止后,空闲的实时进程仍会保留已加载的模型以便下次快速启动,此时可以用 释放显存 释放。
- 显存不足时会话会以 GPU 不可用或显存不足 停止,实时进程和服务器都会自动卸载已加载的模型。可以关闭其他占显存的程序后重试,或在 设置 › 计算 中改用 CPU。
降低延迟的建议
- 先保证不卡顿,再压延迟。 从默认的 250 ms 块长开始,观察 负载:长期低于 50% 再逐步减小块长;超过 80% 或出现 欠载 就加大块长(或直接点 将块长增加到 N 毫秒)。
- 让输入输出走同一个驱动和采样率,状态行显示 单个双工流,可以省掉一个块长的延迟。
- 使用低延迟驱动:Windows 上优先 WASAPI 或 ASIO,Linux 上优先 JACK 或 ALSA,在 高级 › 驱动 中选择。
- 上下文 不增加延迟,但会增加每块的计算量;负载偏高时可以从 2500 ms 适当减小。
- 交叉淡化 直接计入延迟,一般 50 ms 足够;开启 输入降噪 会再增加最多 40 ms。
- 音高算法上,pm 最快,RMVPE 质量最好;GPU 较弱时可以试试 pm。
- GPU 上默认启用 设置 › 计算 › 实时转换使用 CUDA Graph,可以减少每块的开销。
ASIO(Windows)
专业声卡常提供 ASIO 驱动,延迟通常比 WASAPI 更低。默认情况下 ASIO 不会被列出,需要:
- 打开 设置 › 音频,开启 启用 ASIO 驱动(Windows)。
- 回到 实时 页面,点 刷新设备。支持 ASIO 的设备会以 ASIO 作为推荐驱动,也可以在 高级 › 驱动 中手动选择。
实时后台进程在第一次使用时启动并一直保留。切换 ASIO 开关后如果 ASIO 设备打不开,重启一次 rvc-next 服务器即可让新设置作用于实时进程。
用命令行运行
不打开网页也可以实时变声,设备和参数默认沿用网页里保存的设置:
rvc-next live devices # 列出音频设备
rvc-next live check # 检查保存的设备和格式
rvc-next live test-tone # 在输出设备上播放提示音
rvc-next live run -v 我的音色 --pitch 12 # 开始实时转换,Ctrl+C 结束live run 还支持 --block-ms、--crossfade-ms、--context-ms、--threshold-db、--denoise-strength、--phase-vocoder、--input-gain、--record both|converted|input、--allow-fallback 等选项,完整列表见 命令参考。