跳到主要内容

小鲸点歌

收藏0

用本地 RVC 音色翻唱一首歌,并把 40 秒片段发成 QQ 语音条(需自备换声与语音服务)

让 AI 安装

lrt最新版本 0.1.0更新于 2026-11-06下载 0 次

SKILL.md

QQ 点歌:小鲸唱一首#

本技能依赖本地的 RVC 换声工作流与 TTS 语音服务,命令里的路径请按你自己的环境替换。

一句话流程#

  1. 回一句短的(「好,等我几分钟」),别干等着不吭声。
  2. 释放显存:curl -s -X POST http://127.0.0.1:<TTS端口>/unload
  3. 出整首翻唱 → 4. 切 40 秒 → 5. 用语音条发出去。

全部命令都在 ~/.dsh-workspace\rvc2 目录下跑,先 export 这几个环境变量:

cd "~/.dsh-workspace/rvc2"

export PYTHONIOENCODING=utf-8

export TMP="~/.dsh-workspace/tmp" TEMP="~/.dsh-workspace/tmp" TMPDIR="~/.dsh-workspace/tmp"

出整首翻唱#

"python" cover.py "<歌名 歌手>" "assets/weights/xiaojing.pth" 0 "<标签>"
  • 标签随便起,用来做文件名,例如 我本将心向明月。
  • 下载 → 人声分离 → 45 秒分段换声 → 拼接混音,一般 3~6 分钟。
  • 成功时最后一行是 OUT <mp3 路径>,产物在 out/<标签>.mp3。
  • 音源顺序(脚本里已写好,不用管):网易云 → SoundCloud → YouTube → B站。网易云是唯一在国内稳定的,整首能下;其它三个经常超时或 412。四个全失败才算真的下不到。

网易云会员音质(cookie)#

已接入会员账号,下载音质顺序 hires/lossless/exhigh/bestaudio(会员无损优先,实测一首 5 分钟歌约 115MB flac)。

cookie 文件:~/.dsh-workspace\rvc2\netease_cookies.txt(Netscape 格式,含 MUSIC_U)。脚本每次下网易云都先带它;带了失败会自动退回匿名(普通码率,但仍是完整整曲,不影响出歌)。

cookie 一般能撑很久,哪天发现音质掉回 320k 就是过期了,重新登录一次:

# 1. 起一个独立的 Edge(专用 profile,不动用户平时的 Edge)

powershell -NoProfile -Command "Start-Process 'msedge.exe' -ArgumentList '--remote-debugging-port=9334','--user-data-dir=~/.dsh-workspace\edge-netease-profile','https://music.163.com/#/login'"

# 2. 让用户在那个窗口扫码登录,登录完再执行:

"python" export_netease_cookies.py

# 3. 导出完关掉这个 Edge(只杀这个实例,别动用户自己的 Edge)

export_netease_cookies.py 通过 CDP Network.getAllCookies 读出 cookie 并写成 cookies.txt,成功后打印 has MUSIC_U: True。这个专用 profile 会保留登录态,下次重登通常不用再扫码。

去噪重混(建议每次都跑)#

"python" gate_vocal.py "<标签>"

输出 out/<标签>_gated.mp3。作用:按源人声能量做门限,把前奏、间奏里 RVC 生成的沙沙声压掉,并用定值增益对齐响度(不要改回单遍 loudnorm,会把静音段底噪抬成嘶声)。

切 40 秒语音条#

"python" qq_sing.py "out/<标签>_gated.mp3"
  • 自动跳过前奏、挑能量最高的 40 秒(通常是副歌),输出 32k 单声道 wav:out/<标签>_gated_qq40.wav。
  • 想换长度:--seconds 30。
  • 最后一行是 OUT <wav 路径>。

发出去#

整条回复只写这一行,[[voice]] 必须在最开头,前面不能有任何字:

[[voice]]@@SING@@~/.dsh-workspace/rvc2/out/<标签>_gated_qq40.wav
  • 语音服务看到 @@SING@@ 就把这个文件当音频返回,QQ 通道再压成语音条。不要发文件,除非用户明确说「发文件」。
  • 路径写正斜杠,绝对路径,别加引号。

失败怎么办#

现象处理
ERR 下载失败音源全挂。换一首歌或过一会儿再说;别反复重试同一条,最多试两次。
torch.OutOfMemoryError / CUDA out of memory显存被占。先 POST /unload 再重跑;还不行就跟用户说这台机器现在腾不出显存,等几分钟。
No usable added index--index 路径写错,索引是 F:\DSH\rvc-index\xiaojing_added_IVF920_Flat_nprobe_1_xiaojing_v2.index(脚本里已默认设好,一般不会遇到)。
出来的歌前奏有沙沙声没跑 gate_vocal.py,补跑。
语音条发出去没声音/没收到检查 wav 存在且大于 1MB;[[voice]] 是否在整条回复最开头。

音色与参数#

  • 权重:assets/weights/xiaojing.pth(Breeze 语音语料训 200 轮,13.8 分钟语料)。
  • 索引:F:\DSH\rvc-index\xiaojing_added_IVF920_Flat_nprobe_1_xiaojing_v2.index,index-rate 0.65(实测 0.65 咬字最清楚;0.5 更清楚但音色会偏,0.8 音色准但字糊)。
  • pitch 0 是原调;女声唱男声原调可以 --pitch 7 之类,太高会尖,7 以内比较稳。
  • 一首歌不要在 GPU 上并行跑两遍,会 OOM。

别做的事#

  • 不要在训练/其它 GPU 任务进行时点歌(会 OOM),先问一句或直接说明。
  • 不要用 Get-Process pythonw | Stop-Process 清显存:会把模型入口进程一起杀掉,整台机器的模型请求全 500。只按具体 PID 杀,或者用 /unload。
  • 不要为了「修好」重启 DSH。

用途与依赖

作者没写,这些是平台读文件后整理的,以文件为准。

使用示例

请求:用你的声音唱一首《起风了》

预期

先回一句「好,等我几分钟」,然后释放显存、下载音源并生成整首翻唱,去噪重混后截取 40 秒副歌,最后以 [[voice]]@@SING@@ 语音条把片段发出去。

适用场景
  • 用户说「唱首歌」「点歌」
  • 用户要求「用你的声音唱 XX」
  • 用户指定歌名歌手要求翻唱
  • 需要把翻唱片段以 QQ 语音条形式发送
  • 需要从整首翻唱中截取副歌 40 秒片段
输入
  • 歌名与歌手(如「起风了 买辣椒也用券」)
  • 用于命名文件的标签(可选,脚本可自动生成)
  • 片段长度(可选,默认 40 秒)
  • 音调调整 pitch(可选,默认 0 原调)
输出
  • 整首翻唱 mp3(out/<标签>.mp3)
  • 去噪重混后的 mp3(out/<标签>_gated.mp3)
  • 40 秒语音条 wav(out/<标签>_gated_qq40.wav)
  • 以 [[voice]]@@SING@@ 形式发出的 QQ 语音条
运行环境
Python 3(Windows 环境,需本机 GPU 与 RVC 换声工作流、本地 TTS 语音服务)
依赖
  • RVC 换声工作流(cover.py 等脚本)
  • 本地 TTS 语音服务(提供 /unload 接口)
  • torch / CUDA(GPU 推理)
  • ffmpeg 等音频处理工具
  • Edge 浏览器(仅重新导出网易云 cookie 时使用)