jiaqinzhang123/peon-voice ↗★ 0
peon-voice
DSH voice + theme pack plugin: random voice lines on session events, NetEase background music per theme.
AI Analysis
核心用途是为 DSH 交互过程增添趣味音效与背景音乐。适合喜欢个性化语音提示和音乐伴奏的 Web UI 用户。包含 Host 端路由与 Client 端播放器。
Install
This plugin has no verified bundle, or compatibility checks failed. Read the repository notes first. Read the full README ↗
README
Read the full README ↗peon-voice — 语音主题包插件(DSH)
给 DeepSeek Harness 用的语音 + 主题音乐插件:在 agent 会话生命周期事件上播放随机语音提示,并按主题播放网易云音乐背景乐。
- 🎙️ 语音包:新会话(问候)、收到消息(应答)、一轮完成(完成)、agent 向你提问(提问)时随机播放对应语音,多条随机且避免连播同一条
- 🎵 主题包:切换主题时自动切换对应语音包,并播放该主题关键词搜到的网易云歌单
- 🔊 网易云音乐:匿名接口获取免费歌曲并后台顺序播放,不可播 VIP 歌曲(自动跳过);歌单全部播完或连续多首无法播放时自动切换到新歌单;播放语音时背景乐自动闪避(duck)
- 🖥️ 双端实现:Host 端(Node,注册
/peon/*HTTP 路由)+ Client 端(浏览器,轮询事件队列并播放) - 🔄 每次启动重置:播放状态不持久化,每次打开 DSH 都会重新随机挑选歌单(主题/语音包选择会保留)
目录结构
peon-voice/
├── lib/
│ ├── index.js # Host 端:事件监听、语音/主题扫描、HTTP 路由
│ ├── client.js # Client 端:浏览器 UI + 音频播放(__ModuleLoader__ 模块)
│ └── netease.js # 网易云客户端(匿名歌单搜索、流媒体代理)
├── voice-packs/ # 语音包(每个子目录一个包)
│ ├── orc/ # 兽人男声 · Orc Peon
│ └── female/ # 日语动漫萌音 · 女生
├── theme-packs/ # 主题包(每个子目录一个主题)
│ ├── orc-epic/ # 兽人史诗
│ └── anime/ # 日系动漫
└── package.json
安装
把本仓库放到 DSH profiles 的 node_modules 下(或通过路径引用),然后在你的 cordis 配置(如 cordis.patch.yml)中注册该插件条目即可,例如:
plugins:
peon-voice: {}
插件启动后会注册 /peon/* 路由;浏览器端会在 DSH Web 界面加载并开始播放。路径默认指向仓库内的 voice-packs/ 与 theme-packs/,克隆即用。
语音包格式
voice-packs/ / 下一个目录即一个语音包,文件名以类型开头即可(.mp3/.wav 均可,数字后缀随意):
| 文件名 | 触发时机 |
|---|---|
greeting-* | 问候音:打开应用 / 新会话 / 切换工作区(可多条随机) |
ack-* | 应答音:收到消息时(可多条随机) |
done-* | 完成音:一轮对话完成时 |
question-* | 提问音:agent 向你提问时 |
可选 pack.json:{"label": "显示名"}(不写则用目录名)。放好音频后在应用里切换到这个语音包即可,无需重启。
主题包格式
theme-packs//pack.json:
{
"label": "日系动漫",
"voice": "female",
"music": { "keywords": ["动漫主题曲", "二次元主题曲"] }
}
label:界面显示名voice:切换该主题时自动切换的语音包 idmusic.keywords:用于在网易云搜索歌单的关键词(每次从评分最高的若干歌单中随机选一个播放)
环境变量
所有路径都可通过环境变量覆盖,默认值开箱即用:
| 变量 | 默认值 | 说明 |
|---|---|---|
PEON_VOICE_PACKS | /voice-packs | 语音包根目录 |
PEON_VOICE_THEMES | /theme-packs | 主题包根目录 |
PEON_VOICE_STORE | ~/.dsh/peon-voice-pack.json | 当前选中语音包/主题的持久化 |
PEON_VOICE_DEBUG_LOG | ~/.dsh/peon-voice-debug.log | 调试日志 |
HTTP 路由
| 路由 | 说明 |
|---|---|
GET /peon/events | 拉取并清空事件队列(Client 轮询) |
GET /peon/audio?kind= | 从当前语音包随机返回一条音频 |
GET /peon/packs · POST /peon/pack | 列出 / 切换语音包 |
GET /peon/themes · POST /peon/theme | 列出 / 切换主题(同时切换语音包) |
GET /peon/music/playlist · GET /peon/music/stream?id= | 主题歌单 / 歌曲流媒体代理 |
POST /peon/music/leader | 心跳/竞选播放者,返回全局音乐状态 |
POST /peon/music/action | 队列化一条播放命令(由播放者执行) |
POST /peon/music/report | 播放者上报播放状态(全局镜像) |
GET /peon/status | 插件状态总览 |
播放行为
- 歌单内顺序播放,全部播放完毕自动切换到该主题的新随机歌单
- VIP 受限歌曲播放失败时自动跳过;连续 3 首失败(歌单基本全是 VIP)自动切换新歌单
- 手动「切歌」仍为随机(不重复上一首),手动「切歌单」立即换一个新歌单
- 播放状态(当前歌单/曲目)不持久化:每次打开 DSH 都是新的随机歌单
- 多窗口/多标签全局统一:同时开多个会话(多个浏览器上下文)时,由 Host 仲裁出唯一播放者实际播放音乐,其余上下文静默并镜像同一播放状态(歌单/曲目/播放/暂停、主题与语音包切换全部同步);播放者窗口关闭后自动移交并续播同一曲目。语音提示保持各上下文独立触发,不做全局统一。
免责声明
- 语音素材版权归原版权方所有:兽人苦工 / 人类农民语音出自《魔兽争霸 III》(© Blizzard Entertainment),女生语音包素材版权归原作者所有。本仓库仅供个人娱乐学习使用,请勿商用。
- 网易云音乐接口为非官方匿名实现(公开 /api 端点),仅作个人使用;VIP 歌曲不可播放,请遵守网易云音乐服务条款。