dsh-voice-loop
Verifieddsh-voice-loop · v0.1.0 · MIT
DSH 语音闭环:内置语音转写完成后自动发送,并把每轮回答压成一两句用自然中文音色念出来。
Install
dsh plugin add dsh-voice-loop Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Tags
Creators
Readme
dsh-voice-loop
给 DeepSeek Harness 桌面版加一条「语音闭环」:
- 页面侧(自动发送):内置「语音输入」把转写文字塞进草稿后,这个插件会自动点发送, 不用再按回车。右下角有个小面板可以随时开关,并显示输入框/发送键有没有被识别到。
- 宿主侧(朗读回复):一轮回答结束时,把 AI 正文压成开头一两句念出来, 默认约 70 字、十几秒,有「结论」段落就优先念结论。 音色默认用微软在线的 晓晓(zh-CN-XiaoxiaoNeural),比系统自带的 Huihui 自然得多; 没网时自动退回系统 SAPI 音色。
安装
dsh plugin --profile desktop add dsh-voice-loop
从本地源码安装(开发用):
dsh plugin --profile desktop add link:<本仓库目录的绝对路径>
装完 完全退出并重开 DeepSeek Harness(注入行是宿主启动时收集一次,刷新页面不够)。
依赖
Python 3:在线朗读需要
edge-tts,装一次即可:python -m pip install --user edge-tts没装也能用,会自动退回系统自带的 SAPI 中文音色(
Microsoft Huihui Desktop),只是没那么自然。网络:
engine: edge需要联网;离线场景请改成engine: sapi。
使用
- 打开侧栏「插件管理」,确认「语音输入」(蓝色声波图标)是启用的。
- 右下角出现「🎙 语音直发」面板,两个开关 + 一行状态:
- 「说完自动发送」:转写完成后自动点发送;
- 「连说(念完自动开麦)」:发送后等朗读结束,自动点麦克风开下一轮;
- 「说完自动停」常开(要关改
autoStop: false)。 - 状态行应显示
输入框 ✓、发送键 ✓(发送键找不到时会退回模拟回车)。
- 连说打开后:点一次麦克风,之后一句接一句说,中间不用再点。
- AI 回答结束时会自动朗读;新回答会自动打断上一段朗读。
「说完自动停」的原理:录音条出现时,页面自己再开一路只测音量的麦克风 (音频不出本机、不保存),连续静音约 0.9 秒就替你点「停止并识别」; 如果一句都没检测到,就点「取消」,避免发出空消息。
「连说」的原理:宿主在 /dsh-voice-loop/speech 暴露「是否正在朗读」,
页面在发送后轮询它——听到念完才开麦,所以不会把朗读声录进去再发回来。
如果这一轮根本没朗读(比如没网),10 秒后也会开麦;超过 45 秒放弃。
调整朗读长短(改完立刻生效,不用重启)
编辑 settings.json(本目录下),下一次朗读就按新值来:
{ "speak": true, "mode": "brief", "briefChars": 70 }
| 键 | 默认 | 说明 |
|---|---|---|
speak |
true |
关掉就完全不朗读 |
mode |
brief |
brief = 只念开头一两句;full = 念全文(截到 maxChars) |
briefChars |
70 |
brief 模式的目标字数;越小越短。40 ≈ 七八秒,120 ≈ 二十几秒 |
preferConclusion |
true |
优先念带「结论/总结/总之/核心/建议」等标记的段落,而不是第一段 |
includeSubagents |
false |
是否也朗读子会话(子代理/子任务)的回答 |
engine |
edge |
edge = 在线音色(自然,需联网);sapi = 系统本地音色(离线) |
edgeVoice |
zh-CN-XiaoxiaoNeural |
在线音色,候选见下 |
edgeRate |
+0% |
在线语速,-10% 更慢、+20% 更快 |
maxChars |
1200 |
full 模式的最大字数 |
autoSend |
true |
转写完成后自动发送(面板开关的默认值) |
autoStop |
true |
静音自动点「停止并识别」,常开 |
autoReopen |
true |
连说:朗读结束后自动开麦(面板开关的默认值) |
可选的在线音色(改 edgeVoice,下一次朗读就生效)
| 值 | 音色 |
|---|---|
zh-CN-XiaoxiaoNeural |
晓晓,女声,温柔自然(默认) |
zh-CN-XiaoyiNeural |
晓伊,女声,年轻 |
zh-CN-YunxiNeural |
云希,男声,年轻 |
zh-CN-YunjianNeural |
云健,男声,浑厚 |
zh-CN-YunyangNeural |
云扬,男声,新闻播报感 |
zh-CN-liaoning-XiaobeiNeural |
晓北,东北话 |
zh-CN-shaanxi-XiaoniNeural |
晓妮,陕西话 |
zh-TW-HsiaoChenNeural |
曉臻,台湾国语 |
zh-HK-HiuMaanNeural |
曉曼,粤语 |
voice(SAPI 语音名)和 rate(SAPI 语速 -10..10)在 cordis.patch.yml 里,
只在 engine: sapi 或在线合成失败回退时用到,改这两个需要重启应用。
段落的选法:先找开头带「结论 / 总结 / 总之 / 核心 / 要点 / 建议 / 一句话」等标记的段落; 没有就取第一段有实义的正文。
遇到「主要延迟来自三部分:」这种导语句 + 列表时抓重点:只取每项的加粗词
(没有加粗就取冒号前的短语),串成一句,例如
是。主要延迟来自三部分:在线合成、进程冷启动、整段合成。
只有一条要点都抓不到时,才退回把列表念完。
跳过标题、代码块、表格;句子太长时退到最近的逗号,不把半句话掐断。
自动发送的开关状态存在页面 localStorage(dsh-voice-loop.auto)。
已知限制
- 自动发送靠「成段文字 + 最近 1.2 秒内没有真人键盘输入」判断是不是语音转写, 所以极快的粘贴也可能被当成语音;面板上关掉开关即可。
- 在线朗读(
engine: edge)会把要念的那句话发给微软的朗读服务;不想外发就改engine: sapi。 - 在线合成需要联网并已安装依赖:
python -m pip install --user edge-tts。合成失败会自动回退到系统语音。 - 朗读只对主会话生效;子代理/子任务的会话默认不念(
includeSubagents: true可打开)。