dsh-typewriter-blip:模型流式回答时的逐字说话音效

前言

在 DeepSeek Harness(DSH)里跑对话时,助手回答往往是边生成边出现在页面上。眼睛盯着屏幕能跟上节奏,但窗口被最小化、被别的程序挡住,或切到别的标签页时,你只能靠偶尔切回来确认是否还在输出——没有一种「还在说」的听觉反馈。

浏览器里流式文本只是 DOM 在变长,本身不会发声。若用普通定时器排音效,页面一进后台,动画帧和细粒度定时器会被压慢甚至停掉,音效也会跟着消失。下面介绍的 dsh-typewriter-blip(目录名 nsswkj/dsh-typewriter-blip,维护者 nsswkj)针对的就是:在模型回答流式输出时逐字播放短促音效,且窗口在后台时仍尽量照常发声;音色可换,也可自行合成或载入音频样本。

这是什么

说话音效 / Speech Blip 是 DSH 社区插件,分类为模型推理。它挂在 Harness 对话界面输入框上方,观察助手回答区域的文字增量,用 Web Audio 为每个新字符(可配置跳过空格)排程短音;不对用户消息、工具调用和思考过程(reasoning)发声。设置保存在浏览器 localStorage(键 dsh:typewriter-blip:v1),改完即生效。

DSH 生态强调「一切皆插件」;插件目录站 skillhub.cn 与 DeepSeek / 幻方无官方从属关系,安装前宜自行查看源码与许可证(本插件为 MIT)。

核心功能

发声范围与节奏

  • 只对回答发声:默认开启;要求 DOM 上 data-chat-flow-kind 为 assistant-step,且 data-chat-group-part 不是 reasoning。
  • 进入对话 / 历史整段挂载不响:首次看到的容器只建基线;宿主复用行元素且内容变短或不再以旧文本开头时,重新建基线、不补播。
  • 说完即停:最后一个字之后超过「说完即停」窗口(默认 140 ms)无新字符,则裁掉已排程但未播完的部分;队列不会整段丢弃,前台最多保留约 6 个字、不到三分之一秒的待播,后台保留约最后 0.3 秒(PLAYOUT_MS)。
  • 最小间隔:控制两个音之间的最小毫秒数(默认约 45 ms),流式 chunk 很快时用来限制密度;队列过长会丢最旧项,避免声音落后文本一两秒。

后台仍要听得见

页面不可见时,浏览器常停止 requestAnimationFrame 并把定时器压到约一秒一次。插件用双时钟:可见时以动画帧为主;超过约 400 ms 无帧时,由 250 ms 定时器接管排程。音频在 Web Audio 时钟上排程,已排上的音不受页面可见性影响。隐藏页面时会提高缓冲 lead(后台约 1.25 秒),字符批次到达也会直接 tick,避免只靠被压慢的定时器才发现新字。

音色与听感

预设 说明
柔和 三角波,默认
打字机 锯齿波 + 高通噪声瞬态
自定义 合成(方波/三角/锯齿/正弦 + 基频 + 音长 + 亮度)或本地 audio/* 文件(可调播放速度,每字最多约 0.6 秒)

另有音高 / 音量(±12 半音、0–100%)、随机音高与随机音量(逐字 jitter;自定义音频文件通过播放速率近似音高变化)、跳过空格、试听与恢复默认等面板项。按钮文案为 ♪ 说话音效,面板开在按钮上方(靠顶时可能翻到下方),动画在 prefers-reduced-motion 下关闭。

安装与启用

适用 desktop profile。任选其一:

插件市场(dshmarket) 搜索 说话音效,点击安装。

npm 包:

dsh plugin --profile desktop add dsh-typewriter-blip

GitHub 仓库(与 npm 包内容一致):

dsh plugin --profile desktop add github:nsswkj/dsh-typewriter-blip

装完后刷新一次 Harness 页面即可,无需重启 DSH 进程。

插件以当前 DSH 进程的权限在页面内运行;安装前请阅读 仓库源码 与 LICENSE,确认可接受后再装。

典型用法

  1. 按上一节安装并刷新页面。
  2. 在输入框上方找到 ♪ 说话音效 按钮,点开面板。
  3. 打开 启用 总开关;按需选 音色 或 自定义音色,调 最小间隔、说完即停、只对回答发声 等。
  4. 发起对话,等助手流式输出;可用 试听 连播几个字确认当前设置(试听期间按钮会锁定至播完)。

需要恢复出厂参数时,点面板里的 恢复默认。

适用场景与注意

适合:长时间挂着 Harness 等模型输出、希望用短音感知「还在打字」的开发者;需要窗口在后台也能听到进度提示时(仍依赖浏览器与系统的音频策略,极端节流下行为以实际为准)。

注意:

  • 仅 desktop profile;Web 客户端插件形态以 package.json 中 dsh.client.platform: web 为准。
  • 不对 reasoning、用户消息和 UI 块(代码块、按钮等)发声,避免和「助手正文」混淆。
  • 自定义音频与随机音高通过 playbackRate 实现,调高时单字会变短。
  • 社区目录页星标等统计会变动;以安装时页面与仓库 README 为准。

结尾

dsh-typewriter-blip 把流式回答映射成可配置的逐字短音,并针对后台节流做了排程补偿,适合给 DSH 对话加一层不依赖盯屏的听觉反馈。进一步了解与 issue:

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye