dsh-web-ding:在浏览器端实现 Agent 回合结束提示音

在 DSH 的 Web 客户端开发中,明确 Agent 回合的结束是一个常见需求。dsh-web-ding 作为一个插件,通过在浏览器端合成并播放声音,解决了“不知道 Agent 何时真正空闲”的问题。

插件定位

这是一个浏览器专属的“叮”声提示插件。它由两部分组成:Host 端监听器检测 agent/status 的空闲状态,并将信号推送到 falling-ts-web-ding 设置命名空间;浏览器端客户端镜像该命名空间,通过 Web Audio API 合成提示音并弹出通知。

安装与前置条件

运行以下命令将插件添加到 Web Profile:

dsh plugin --profile web add github:falling-ts/dsh-web-ding

安装前需确保 Web 应用包含客户端包(package.json 中的 dsh.client 声明)。

核心功能

  1. 合成提示音:使用 Web Audio API 在前端合成“叮”声(三个正弦振荡器加指数衰减包络)。Host 端不播放音频,不调用系统通知。
  2. Host 端监听:监听 Agent/Status 的空闲转换(所有回合结束,包括子 Agent)。只有新的空闲转换会触发信号,重复的空闲状态保持静默。
  3. 浏览器端客户端:镜像设置命名空间,实时响应用户配置。支持 Win11 风格的右下角 Toast 通知。
  4. 通知抽屉:点击 Toast 打开通知抽屉,列出回合结束消息。消息存储在 localStorage,最多保留 100 条,支持单条删除和全部删除。

配置说明

配置项存储在 falling-ts-web-ding 命名空间中,可在 设置 → 提示音配置 面板调整。该插件包含两个独立的配置块:

Block 1 — 弹出用户选择

当浏览器端的 [data-question-key] 元素出现时触发,检测是纯前端行为。可调整:
* questionEnabled:开关。
* questionVolume:音量(0..1)。
* questionFreq:频率(80..4000 Hz)。
* questionDecayMs:衰减时长(100..4000 ms)。

Block 2 — 回合结束

监听 Agent 空闲转换。Host 端在检测到 agent/status 空闲变化时发布 done 信号。可调整:
* turnEndEnabled:开关。
* turnEndVolume:音量(0..1)。
* turnEndFreq:频率(80..4000 Hz)。
* turnEndDecayMs:衰减时长(100..4000 ms)。

注意事项

  1. 浏览器自动播放策略:浏览器会阻止音频播放,直到用户与页面发生交互(点击、按键)。首次使用前需在页面上点击一次或使用“试听”按钮预热 AudioContext。
  2. 后台标签页:浏览器可能会暂停后台标签页的 AudioContext,保持标签页可见才能听到声音。
  3. 数据隔离:消息日志完全存储在浏览器 localStorage 中,Host 端不读写该数据。

源码与文档

该插件依赖 settings/document-updated 镜像通道与浏览器端通信。源码与目录页:https://github.com/falling-ts/dsh-web-ding

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

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

小夜