SKILL.md
5.2 KB查看排版效果| 1 | --- |
| 2 | name: qq-singing |
| 3 | description: 用本机 RVC「小鲸」音色翻唱一首歌,并把 40 秒片段以 QQ 语音条发出去。用户说「唱首歌」「来一首 XX」「用你的声音唱 XX」「点歌」时使用。 |
| 4 | --- |
| 5 | |
| 6 | # QQ 点歌:小鲸唱一首 |
| 7 | |
| 8 | > 本技能依赖本地的 RVC 换声工作流与 TTS 语音服务,命令里的路径请按你自己的环境替换。 |
| 9 | |
| 10 | ## 一句话流程 |
| 11 | |
| 12 | 1. 回一句短的(「好,等我几分钟」),别干等着不吭声。 |
| 13 | 2. 释放显存:`curl -s -X POST http://127.0.0.1:<TTS端口>/unload` |
| 14 | 3. 出整首翻唱 → 4. 切 40 秒 → 5. 用语音条发出去。 |
| 15 | |
| 16 | 全部命令都在 `~/.dsh-workspace\rvc2` 目录下跑,先 export 这几个环境变量: |
| 17 | |
| 18 | ```bash |
| 19 | cd "~/.dsh-workspace/rvc2" |
| 20 | export PYTHONIOENCODING=utf-8 |
| 21 | export TMP="~/.dsh-workspace/tmp" TEMP="~/.dsh-workspace/tmp" TMPDIR="~/.dsh-workspace/tmp" |
| 22 | ``` |
| 23 | |
| 24 | ## 出整首翻唱 |
| 25 | |
| 26 | ```bash |
| 27 | "python" cover.py "<歌名 歌手>" "assets/weights/xiaojing.pth" 0 "<标签>" |
| 28 | ``` |
| 29 | |
| 30 | - 标签随便起,用来做文件名,例如 `我本将心向明月`。 |
| 31 | - 下载 → 人声分离 → 45 秒分段换声 → 拼接混音,一般 3~6 分钟。 |
| 32 | - 成功时最后一行是 `OUT <mp3 路径>`,产物在 `out/<标签>.mp3`。 |
| 33 | - 音源顺序(脚本里已写好,不用管):网易云 → SoundCloud → YouTube → B站。**网易云是唯一在国内稳定的**,整首能下;其它三个经常超时或 412。四个全失败才算真的下不到。 |
| 34 | |
| 35 | ### 网易云会员音质(cookie) |
| 36 | |
| 37 | **已接入会员账号**,下载音质顺序 `hires/lossless/exhigh/bestaudio`(会员无损优先,实测一首 5 分钟歌约 115MB flac)。 |
| 38 | |
| 39 | cookie 文件:`~/.dsh-workspace\rvc2\netease_cookies.txt`(Netscape 格式,含 MUSIC_U)。脚本每次下网易云都先带它;带了失败会自动退回匿名(普通码率,但仍是完整整曲,不影响出歌)。 |
| 40 | |
| 41 | cookie 一般能撑很久,哪天发现音质掉回 320k 就是过期了,重新登录一次: |
| 42 | |
| 43 | ```bash |
| 44 | # 1. 起一个独立的 Edge(专用 profile,不动用户平时的 Edge) |
| 45 | 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'" |
| 46 | # 2. 让用户在那个窗口扫码登录,登录完再执行: |
| 47 | "python" export_netease_cookies.py |
| 48 | # 3. 导出完关掉这个 Edge(只杀这个实例,别动用户自己的 Edge) |
| 49 | ``` |
| 50 | |
| 51 | `export_netease_cookies.py` 通过 CDP `Network.getAllCookies` 读出 cookie 并写成 cookies.txt,成功后打印 `has MUSIC_U: True`。这个专用 profile 会保留登录态,下次重登通常不用再扫码。 |
| 52 | |
| 53 | ## 去噪重混(建议每次都跑) |
| 54 | |
| 55 | ```bash |
| 56 | "python" gate_vocal.py "<标签>" |
| 57 | ``` |
| 58 | |
| 59 | 输出 `out/<标签>_gated.mp3`。作用:按源人声能量做门限,把前奏、间奏里 RVC 生成的沙沙声压掉,并用定值增益对齐响度(不要改回单遍 loudnorm,会把静音段底噪抬成嘶声)。 |
| 60 | |
| 61 | ## 切 40 秒语音条 |
| 62 | |
| 63 | ```bash |
| 64 | "python" qq_sing.py "out/<标签>_gated.mp3" |
| 65 | ``` |
| 66 | |
| 67 | - 自动跳过前奏、挑能量最高的 40 秒(通常是副歌),输出 32k 单声道 wav:`out/<标签>_gated_qq40.wav`。 |
| 68 | - 想换长度:`--seconds 30`。 |
| 69 | - 最后一行是 `OUT <wav 路径>`。 |
| 70 | |
| 71 | ## 发出去 |
| 72 | |
| 73 | 整条回复只写这一行,`[[voice]]` 必须在最开头,前面不能有任何字: |
| 74 | |
| 75 | ``` |
| 76 | [[voice]]@@SING@@~/.dsh-workspace/rvc2/out/<标签>_gated_qq40.wav |
| 77 | ``` |
| 78 | |
| 79 | - 语音服务看到 `@@SING@@` 就把这个文件当音频返回,QQ 通道再压成语音条。**不要发文件**,除非用户明确说「发文件」。 |
| 80 | - 路径写正斜杠,绝对路径,别加引号。 |
| 81 | |
| 82 | ## 失败怎么办 |
| 83 | |
| 84 | | 现象 | 处理 | |
| 85 | | --- | --- | |
| 86 | | `ERR 下载失败` | 音源全挂。换一首歌或过一会儿再说;别反复重试同一条,最多试两次。 | |
| 87 | | `torch.OutOfMemoryError` / `CUDA out of memory` | 显存被占。先 `POST /unload` 再重跑;还不行就跟用户说这台机器现在腾不出显存,等几分钟。 | |
| 88 | | `No usable added index` | `--index` 路径写错,索引是 `F:\DSH\rvc-index\xiaojing_added_IVF920_Flat_nprobe_1_xiaojing_v2.index`(脚本里已默认设好,一般不会遇到)。 | |
| 89 | | 出来的歌前奏有沙沙声 | 没跑 `gate_vocal.py`,补跑。 | |
| 90 | | 语音条发出去没声音/没收到 | 检查 wav 存在且大于 1MB;`[[voice]]` 是否在整条回复最开头。 | |
| 91 | |
| 92 | ## 音色与参数 |
| 93 | |
| 94 | - 权重:`assets/weights/xiaojing.pth`(Breeze 语音语料训 200 轮,13.8 分钟语料)。 |
| 95 | - 索引:`F:\DSH\rvc-index\xiaojing_added_IVF920_Flat_nprobe_1_xiaojing_v2.index`,index-rate 0.65(实测 0.65 咬字最清楚;0.5 更清楚但音色会偏,0.8 音色准但字糊)。 |
| 96 | - `pitch 0` 是原调;女声唱男声原调可以 `--pitch 7` 之类,太高会尖,7 以内比较稳。 |
| 97 | - 一首歌不要在 GPU 上并行跑两遍,会 OOM。 |
| 98 | |
| 99 | ## 别做的事 |
| 100 | |
| 101 | - 不要在训练/其它 GPU 任务进行时点歌(会 OOM),先问一句或直接说明。 |
| 102 | - 不要用 `Get-Process pythonw | Stop-Process` 清显存:会把模型入口进程一起杀掉,整台机器的模型请求全 500。只按具体 PID 杀,或者用 `/unload`。 |
| 103 | - 不要为了「修好」重启 DSH。 |
文件内容是平台检查时读出的文本,只供查看。平台不会运行包里的任何脚本或程序。

