Passer au contenu principal
B

dsh-qqmusic-plugin

banzhangdeerfenzhiyi/dsh-qqmusic-plugin

QQ Music karaoke + AI cover singing for DeepSeek Harness WeChat/QQ persona bots: search a song, split vocals with Demucs, convert the voice with RVC, mix and send a real voice bubble (WeChat SILK) or a QQ record.

Installer

dsh plugin --profile web add github:banzhangdeerfenzhiyi/dsh-qqmusic-plugin

README

dsh-qqmusic-plugin

npm license

给 DeepSeek Harness(DSH)里的微信 / QQ 人格机器人 加一个真·唱歌技能:点一首 QQ 音乐的歌,她用自己的 AI 音色翻唱一段,以 真实微信语音条 / QQ 语音发出来。

Let your DSH persona bot sing: search QQ Music, split vocals with Demucs, convert the voice with RVC, mix with the original accompaniment, and send it as a real WeChat voice bubble (SILK) or a QQ voice message.

文档:使用手册 PDF · 文件清单 · 安全说明

插件生态:本插件是 DSH 微信人格工具链的一部分 —— 语音包、微信部署体检、WeChat-Agent 整合包。详见文末「插件生态与配合使用」。


能做什么

  • 点歌翻唱(cover):她的音色 + 原曲伴奏,默认 30 秒(8~45 秒可调)。
  • 原声片段(original):直接放原唱一小段,2~3 秒出结果。
  • 清唱(acapella):去掉伴奏只留她的声音。
  • 会员音源:接入 QQ 音乐会员账号后会员歌 / 320k 音源可用;没有会员自动走免费档。
  • 自动兜底:长群会话里模型容易“嘴上说唱、实际不调用工具”,插件会自己接管唱完。
  • 找不到歌时:自动用她的声音发语音说「我不知道你说的歌怎么唱哦」。
  • 微信 + QQ 双端;QQ 侧通过给 qq-fish 插件打一个「点歌快速路径」补丁接入。

工作原理

"唱首晴天"
  ├─ QQ 音乐搜索 ─ 歌名相似度校验(不像就当作没找到)
  ├─ vkey 解析 ─ 会员 320k / 免费 128k,下载并缓存
  ├─ ffmpeg 截副歌 30 秒
  ├─ Demucs 分轨(GPU)→ 人声 + 伴奏
  ├─ librosa pyin 估原唱音高 → 自动变调
  ├─ RVC 音色转换(GPU,Applio)
  ├─ ffmpeg 混音 + 母带处理
  ├─ 24k PCM → 微信 SILK 语音条;同时产出 MP3 供 QQ record 使用
  └─ 发送:微信本机 hook /SendVoiceMsg | QQ OneBot record → NapCat 转码

同一首歌被多个群同时点时会串行渲染、复用缓存,不会抢文件产出截断语音。

也可以在 DSH 的「添加插件」里填本仓库的 GitHub 地址(不是 npm 包名)安装: DSH 会拉取仓库并读取 package.json 的 dsh.bundle。包名方式只适用于已发布到 npm 的插件。

安装方式

方式 A:DSH「添加插件」填 GitHub 地址(推荐,现在就能用)

DSH 桌面版 → 插件 → 添加插件,输入本仓库地址:

https://github.com/banzhangdeerfenzhiyi/dsh-qqmusic-plugin

DSH 会拉取仓库并读取 package.json 的 dsh.bundle,按 cordis.patch.yml 加载插件。 安装完成后重启 DeepSeek Harness。

方式 B:命令行安装(等价于 A)

dsh plugin --profile desktop add https://github.com/banzhangdeerfenzhiyi/dsh-qqmusic-plugin

方式 C:npm 包名(已发布,最省事)

dsh plugin --profile desktop add dsh-qqmusic-plugin

当前版本:0.1.0(npm 页面)。 中国大陆镜像源同步可能延迟几分钟;如果暂时装不到,指向官方源 https://registry.npmjs.org 即可。

方式 D:本地脚本(开发者)

npm install
node tools/install.mjs     # 自动探测路径并写入 profile patch
# 重启 DSH

环境要求

项目要求
系统Windows 10/11 x64(微信 hook、内存提取工具是 Windows 专属;核心翻唱流水线本身是跨平台的)
DSHDeepSeek Harness 桌面版(本机已有 profile,如 desktop)
GPUNVIDIA,显存 ≥ 8GB(Demucs + RVC 推理)
RVC 环境一个可用的 RVC 目录:venv312(torch、demucs、soundfile、librosa、faiss)+ applio(含 core.py、ffmpeg(.exe))+ models(.pth/.index 音色模型)
微信通道WeChatAgent 本机 hook(默认 http://127.0.0.1:30001)及其工作区
QQ 通道(可选)dsh-xingzhudafeiyu-home + NapCat OneBot(默认 ws://127.0.0.1:3001)
QQ 音乐账号(可选)本机登录过 QQ 音乐的客户端,或扫码 / 手动 cookie

RVC 环境需要自己准备(本插件不训练、不分发音色模型)。路径支持自动探测: 配置 rvcRoot / 环境变量 RVC_ROOT → ~/rvc → ~/Documents/rvc → <DSH_HOME>/rvc。

安装

# 1. 依赖(唯一运行依赖:silk-wasm,WASM 实现,无需编译)
npm install

# 2. 装进 DSH profile:复制到 <DSH_HOME>/dsh-qqmusic-plugin + 写 profile patch
node tools/install.mjs

#    可选参数:
#    --profile <name>      指定 profile(默认 desktop)
#    --rvc-root <path>     显式指定 RVC 根目录
#    --workspace <path>    WeChatAgent 工作区
#    --remove              卸载(从 patch 移除入口,文件保留)
  1. 重启 DeepSeek Harness(host 插件只在启动时加载)。日志 ~/.dsh/qqmusic/qqmusic.log 出现 apply: registered sing_song, qq_music_search 即成功。

  2. 验证(不经过聊天也可以直接跑):

node tools/live-sing.mjs --keyword "稻香" --mode original --seconds 8   # 最快
node tools/live-sing.mjs --keyword "稻香" --mode cover --seconds 20     # 完整翻唱

也可以用 bundle 方式安装:把本包加入 profile 依赖后 DSH 会读取 cordis.patch.yml。 两种方式二选一,别同时用,否则插件会挂载两次。

会员音源(可选)

匿名请求只能听免费歌。三种接入方式任选其一:

node tools/lift-cookie.mjs    # A. 零操作:从本机 QQ 音乐 Windows 客户端内存提取登录态
node tools/qq-login.mjs       # B. 扫码登录(QQ 账号)
node tools/qq-status.mjs --cookie "qqmusic_uin=...;qqmusic_key=..." --save   # C. 手动 cookie

登录态保存在 ~/.dsh/qqmusic/cookie.json,之后 node tools/qq-status.mjs 会实际解析并 下载一首会员歌,告诉你这个账号到底有没有会员。退出登录:node tools/qq-login.mjs --clear。

配置(profile patch 中的 config)

字段默认说明
enabled / promptEnabledtrue开关插件 / 是否注入「唱歌规则」系统提示
rvcRoot自动探测RVC 根目录(含 applio/core.py)
python / applioDir / ffmpeg / ffprobe由 rvcRoot 推导需要时可单独覆盖
modelPaimon音色模型名(models 里定义)
modelsPaimon / DaFeiYu / Ying{ 名称: { pth, index, targetF0 } },可覆写或新增
pitch / autoPitch9 / true变调半音;autoPitch 按原唱音高自动算
indexRate / protect / timbre0.45 / 0.5 / 1.0RVC 参数
defaultSeconds / maxSeconds30 / 45默认 / 最长片段(微信语音条上限 60 秒)
workDir<rvcRoot>/songs/qqmusic下载与中间文件缓存
workspace自动探测WeChatAgent 工作区
hookUrlhttp://127.0.0.1:30001本机微信 hook
autoSingEnabled / autoSingCooldownMstrue / 90000微信端自动兜底与节流
authEnabled / cookieFiletrue / ~/.dsh/qqmusic/cookie.json会员登录态
minMatchScore30歌名匹配低于此分数视为“没找到”
voiceFallbackEnabled / notFoundVoiceTexttrue / 我不知道你说的歌怎么唱哦找不到歌时的语音道歉
fallbackToOriginaltrue翻唱失败退化为原声片段

使用

微信端

用户消息里只要同时出现「唱」+ 歌名就会触发:

  • 「唱首起风了」「给我唱一段稻香」「你会唱七里香吗」「来一个晴天听听」
  • 「唱两句」→ 1015 秒;「唱一整段」→ 4045 秒
  • 「放一段×× / 听原唱」→ original;「清唱」→ acapella

私聊和群聊都支持;群聊里被 @ 或模型判断值得接话时触发,一轮最多一首。

QQ 端(可选)

QQ 上的机器人由另一个插件承载(dsh-xingzhudafeiyu-home),给它打点歌补丁:

node tools/patch-qqfish.mjs --check   # 看是否已打补丁、qq-fish 版本是否在适配列表
node tools/patch-qqfish.mjs           # 打补丁(自动备份,失败不写文件)
node tools/patch-qqfish.mjs --remove  # 还原

打完后 QQ 里 @她「唱首七里香」即可。补丁会在模型回复前插入确定性快速路径: 先回一句“好,等我一下”,随后渲染并以 QQ 语音条发出;找不到歌就用语音道歉; 失败自动退回原文字回复。该补丁依赖 qq-fish 的内部文件结构,升级后需重新打; 脚本会做版本提示与锚点校验,锚点不匹配时不会改动原文件。

排错

现象处理
微信里不唱、只回文字看 ~/.dsh/qqmusic/qqmusic.log 是否有 autosing: ... request、sing: done
语音很短(如 6 秒)已修复的并发截断问题;确认插件版本 ≥ 本版,必要时删掉该歌缓存目录重试
找不到歌 / 会员歌失败node tools/qq-status.mjs 验证会员归属;免费档会员歌会走免费版本或报错
RVC 转换卡住numba 缓存目录不可写会忙等;插件已设置 NUMBA_CACHE_DIR,手动跑脚本时也要设
发语音 400hook 只接受 <workspace>/state/voice/outgoing/*.silk;确认 WeChatAgent 在运行、token 可读
“这个会话没有绑定微信聊天”先在微信里给机器人发一条消息再点歌
QQ 里只回“哼两句”node tools/patch-qqfish.mjs --check,未打补丁就运行一次;改完重启 DSH

日志:~/.dsh/qqmusic/qqmusic.log(翻唱)、~/.dsh/qq-fish/voice.log(QQ 点歌)。

测试

npm test                                                          # 纯本地单测
QQMUSIC_NETWORK_TEST=1 node test/unit.test.mjs                    # 加联网搜索
node test/notfound.test.mjs --send                                # 找不到歌→语音道歉
QQMUSIC_SPAWN_INHERIT=1 node test/concurrent-render.test.mjs      # 并发截断回归(需 GPU)

已知限制

  • Windows 专属:微信 hook 发送、内存提取登录态;核心翻唱流水线本身可在其它系统跑,但需要自行接入发送端。
  • 需要 NVIDIA GPU(8GB 显存级)与可用的 RVC 环境;纯 CPU 会很慢。
  • QQ 音乐接口为非官方网页接口,接口变动时需更新 src/qqmusic.mjs。
  • 会员歌受版权 / 专辑购买限制,个别歌即使有会员也解析不到。
  • 翻唱仅供个人娱乐:请使用你有权使用的音色,不要用于冒充、诈骗或侵权。

插件生态与配合使用

这套工具链拆成 4 个独立仓库,按「基础设施 → 语音能力 → 点歌 / 换音色」分层:

仓库作用什么时候需要
wechat-agent-bundleWeChatAgent 安装包(0.4.1,含已授权匹配微信 4.1.10.27 客户端)+ DSH 接入插件 + Hook 部署脚本/教程微信侧接入 DSH 的基础设施(语音条、人格聊天)
dsh-wechat-deploy-plugin在聊天里检查 / 准备 / 启动 / 重启微信 HookHook 没就绪、版本不匹配、语音发不出去时先跑它
dsh-voicepack-plugin15 个 Edge 音色 + 3 个 RVC 音色,用指定音色说微信语音条想换音色 / 男声说话
本仓库 dsh-qqmusic-pluginQQ 音乐点歌 + AI 翻唱(默认 30 秒语音条)想听「她」唱歌

配合使用示例(同一台机器)

  1. 先按 wechat-agent-bundle 装好 WeChatAgent 与 DSH 接入插件,登录微信。
  2. 用 dsh-wechat-deploy-plugin 的 wechat_deploy_status 确认 Hook ready —— 语音条通道就绪。
  3. 在微信里:
  4. 三个插件共用同一条「Edge TTS / RVC → SILK → 本机 hook」语音通道,互不替换: 原有 dsh-wechatagent-voice-plugin 的 send_voice 继续用默认音色说话,本插件负责「唱歌」, 语音包负责「换音色」。

许可## 许可

MIT。音色模型、QQ 音乐内容与 NapCat / Applio / Demucs 等第三方组件遵循各自的许可。


English quick start

  1. Requirements: Windows + DSH desktop, NVIDIA GPU (8 GB+), a working RVC tree (applio/core.py, venv312 with torch/demucs/librosa/faiss, models/*.pth + *.index), WeChatAgent hook for WeChat voice, optionally NapCat + dsh-xingzhudafeiyu-home for QQ.
  2. npm install then node tools/install.mjs (auto-detects the RVC tree and the WeChatAgent workspace; --rvc-root / --workspace override).
  3. Restart DeepSeek Harness, then say “唱首晴天” to the bot — or run node tools/live-sing.mjs --keyword "晴天" to test the pipeline.
  4. Subscription tracks: node tools/lift-cookie.mjs (Windows client, zero interaction), node tools/qq-login.mjs (QR login), or paste a cookie via node tools/qq-status.mjs --cookie "..." --save. Verify with node tools/qq-status.mjs.
  5. QQ side (optional): node tools/patch-qqfish.mjs patches the qq-fish plugin with a deterministic sing fast-path; --check / --remove supported.
  6. Companion repositories (optional): dsh-voicepack-plugin for choosing voices, dsh-wechat-deploy-plugin for hook diagnostics, and wechat-agent-bundle for the WeChatAgent installer / integration plugin.

Paths are auto-detected and can be configured in the profile patch (cordis.patch.yml / tools/install.mjs). Everything runs locally; the only outbound traffic is to QQ Music and the local WeChat hook / NapCat.

Plugins associés