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

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

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

小夜