dsh-audio-player:DSH 内的 MP3 悬浮窗播放器

前言

在 DeepSeek Harness(DSH)里长时间写代码、跑智能体时,很多人会希望有一套不离开界面的背景音乐。系统默认播放器会切到别的窗口,浏览器标签页里的音频又容易和 DSH 自身的语音播报、启动动画或其它插件抢控制权。社区插件 dsh-audio-player(维护者 edgewalker6666,分类:客户端)针对的是另一类需求:在 DSH 进程内自建播放链路,用独立悬浮窗管理曲库,并在可选情况下与启动动画对齐起止。

下面介绍它的定位、能力与安装用法;事实以 GitHub 仓库 README 为准。

这是什么

dsh-audio-player 是一个 DSH 内的 MP3 音频播放器:用户自行导入音乐,在可调大小的独立悬浮窗里播放;若当前环境有启动动画(优先适配长征机启动动画 dsh-startup-secret,其次 dsh-theme-prts),可切换到「启动动画同步」模式,从 0:00 起播,动画结束时渐隐并停止。

播放器使用自己的 HTMLAudioElement,不会暂停、静音或改动 DSH、启动动画、语音播报以及其它插件的声音。实现上 UI 放在 Shadow DOM,宿主只增加 #dsh-audio-player-host,不修改 DSH 的 React 树;悬浮窗 z-index 低于启动动画层,启动期间被动画盖住。

许可证为 MIT(README);当前 package 版本 1.0.0,要求 DSH 0.2.1-rc.3(web profile / 桌面端)、Node >= 20。

核心功能

曲库与直接播放

  • 导入 MP3:点「导入」多选文件,或把 MP3 拖进悬浮窗;文件会写入 DSH 数据目录,重启后仍在。
  • 曲库:记录标题、时长、大小;单击选中、双击直接播放。
  • 控制:播放 / 暂停、上一首 / 下一首、拖动进度、音量、静音、循环。
  • 悬浮窗:拖标题栏移动,拖右边缘 / 下边缘 / 右下角缩放;折叠、隐藏为右下角悬浮球;位置与尺寸会记住。

也可把 MP3 复制到数据目录下的 tracks/,在播放器里点「刷新」重建索引;失效条目会被清理。

启动动画同步

同步依据动画的真实生命周期,而不是固定秒数:

启动动画 开始信号 结束信号
长征机(dsh-startup-secret,优先) #dsh-startup-root 移除 dsu-boot root 移除 / dsh-startup:done
dsh-theme-prts html[data-prts-startup-active] 出现 属性移除 / 覆盖层移除
无启动动画 不会播放 —

音频比动画长时,只保留与动画时长相同的最前段;比动画短时放完即止。结束渐隐可在 0–3 秒 调节,默认 1.2 秒。若本次会话动画被跳过(例如已播过),启动音频不会擅自播放。

浏览器 / Electron 的自动播放策略可能要求一次用户点击后才出声;若启动音频被拦截,播放器会等待页面上第一次点击,再把音频对齐到动画当前进度。

持久化与 API

音乐、曲库、音量、模式、窗口状态保存在 %USERPROFILE%\.dsh\dsh-audio-player\(曲库 library.json,设置 config.json)。宿主路由包括 /dsh-audio-player/app.js、/api/state、/api/config、/api/tracks、/api/media/<id>(支持 HTTP Range)。自定义路由经 DSH connection 的信任栅栏,未认证请求返回 401。

MP3 要求标准 MPEG 音频(ID3v2 或帧同步头均可),单文件 <= 200 MB。

安装与启用

插件以当前 DSH 进程权限运行;安装前建议浏览源码与 MIT 许可证,确认符合你的环境策略。

从 GitHub 安装(Web profile)

在资料给出的命令如下。安装后需重启 dsh web 并刷新页面。

dsh plugin --profile web add github:edgewalker6666/dsh-audio-player

本地脚本安装(桌面端推荐)

在插件目录执行(README 示例为 desktop profile):

powershell -ExecutionPolicy Bypass -File .\install.ps1 -Profile desktop

脚本会建立 profile 下 node_modules\dsh-audio-player 目录联接、向 cordis.patch.yml 或 dsh.profile.bundles 登记,并在 profile 的 package.json 中登记本地依赖。完成后退出并重新打开 DSH(桌面端仅刷新页面不会加载新的 index 注入表);Web 端同样需重启 dsh web 后刷新。

手动步骤见仓库 INSTALL.md。

典型用法

  1. 打开播放器,点「导入」选 MP3,或拖文件进悬浮窗。
  2. 在「曲库」选中曲目;双击可直接播放。
  3. 顶部模式在 直接播放 / 启动动画 间切换,或在「设置」里切换。
  4. 设置可调:直接播放音量、启动动画音量、结束渐隐、循环、重置窗口、打开音频文件夹、复制路径。
  5. 用标题栏移动窗口,用边缘与右下角缩放;– 折叠,× 收成悬浮球。

适用场景与注意

适合:希望在 DSH 内常驻 BGM、且不想干扰其它插件音频的开发者;使用长征机或 PRTS 主题启动动画、希望开屏与音乐对齐的用户。

注意:

  • 兼容性以 README 为准:Chromium 系(Electron / Edge / Chrome),需 HTMLAudioElement 与 Shadow DOM。
  • 卸载可用 uninstall.ps1 -Profile desktop,只移除安装登记与 node_modules 联接,不会删除 ~/.dsh/dsh-audio-player/ 里的音频与设置。
  • 若重启后无悬浮窗,检查 profile 的 node_modules、桌面端 cordis.patch.yml 中 - id: dsh-audio-player,避免 bundle 与 patch 重复登记;导入报 415 多为非有效 MP3。

DSH 生态强调「一切皆插件」;SkillHub 目录页 为社区索引,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-audio-player 把 MP3 播放、曲库与可选启动动画同步收进 DSH 内部,音频链路与其它插件隔离。需要安装命令、数据路径与排查表时,以仓库 README 为准。

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

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

小夜