dsh-spectrum-rail:把 DSH 轮次导航条变成音频频谱

前言

DeepSeek Harness(DSH)的对话右侧有一条轮次导航条,用来快速跳转历史会话。这条导航条默认是静态的,但 DSH 的设计理念是「一切皆插件」,社区已经做了不少围绕它做扩展的尝试。dsh-spectrum-rail 就是其中一个:它不改变导航条的原生交互,只是把每一条的宽度改成随音频跳动,把原本单调的导航条变成一条音频频谱。

插件定位与维护者

dsh-spectrum-rail 是一个 DSH 插件,由维护者 Microqian2th 开发。它不依赖任何外部音频服务,而是通过本地采集电脑里的声音,再驱动导航条上的 42 条色块做长度变化。它属于「趣味换装」类插件,主要面向在 Windows 上使用 DSH 0.2.0 及以上的开发者。

核心功能

  • 42 段对数频谱:覆盖 40 Hz – 16 kHz 频段,底部为最低频,顶部为最高频。
  • 长度由音频驱动:每条色块的宽度跟随音频 FFT 结果变化,最大 60px(约为原生小条宽度的 3 倍)。
  • 未加载轮次的占位:当对话轮次少于 42 条时,插件会在下方用 1px 下边 + 2px 端帽的托盘占位,并且同样跟着音乐跳动。
  • 原生样式与交互:已加载的条采用 border-l4 样式,未加载的透明度为 0.6,悬停时为 label-tertiary,当前轮为白色;所有交互(滚轮、悬停预览、点击跳转、键盘操作)均由 DSH 自己处理,插件只改样式。
  • 右键菜单:在导航条上右键可以:
  • 选择系统音频(仅 Windows,使用 WASAPI 回环,无需虚拟声卡)
  • 选择麦克风 / 虚拟声卡(走浏览器 getUserMedia)
  • 开关频谱(关闭后恢复原生外观并停止采集)
  • 刷新设备列表
  • 状态行反馈:选择设备后,菜单会显示类似 正在采集 · 96kHz · 已收 KB · 峰值 的信息,用来区分「没数据」还是「没动画」。

安装与启用

安装前需要满足以下条件:

  • Windows 10/11(系统音频功能依赖)
  • DSH 版本 ≥ 0.2.0
  • .NET Framework 4.x(Windows 自带)

方式一:本地目录

git clone https://github.com/Microqian2th/dsh-spectrum-rail.git
dsh plugin --profile <profile> add ./dsh-spectrum-rail

或在 DSH 的插件管理页使用「安装本地目录」功能,选择该文件夹。

方式二:Release 包

从 GitHub Releases 下载 dsh-spectrum-rail-<version>.zip,解压后通过插件页安装该目录。

安装完成后需要重启一次 DSH,因为 Host 需要重新加载才能拉起音频采集助手。

使用方法

在 DSH 对话右侧的轮次导航条上右键,会出现一个菜单。菜单里会列出可用的输入设备与控制选项:

  • 系统音频(本机回放):使用 WASAPI 回环采集电脑正在播放的声音(仅 Windows)。
  • 麦克风 / 虚拟声卡:走浏览器的 getUserMedia 接口,适合 VB-Cable、立体声混音等场景。
  • 频谱:开 / 关。关闭后插件会停止采集并恢复原生外观,状态会被记住。
  • 刷新设备:重新枚举系统可用的输入设备。

选择设备后,菜单下方会显示当前状态信息(例如采样率、已接收的数据量、峰值),方便判断是否正常工作。

工作原理

插件采用「本地助手 + 客户端」的架构:

  • Host 端(index.js + native/LoopbackCapture.cs)运行一个本地 HTTP 服务,监听 127.0.0.1:45999–46010,用于与浏览器通信。
  • Host 端还包含一个名为 loopback-capture.exe 的辅助程序,使用 Windows WASAPI 回环模式采集默认输出设备的 PCM 音频(float32 交织格式)。
  • 客户端(client.js)通过 fetch 获取音频数据,存入 AudioBuffer 队列,再通过双分析器分别做 FFT:8192 点长窗用于低频段,2048 点短窗用于中高频段。
  • 客户端只覆盖导航条每条按钮的 ::before 样式,不接管任何 DOM 交互;找不到对应结构时会静默不生效。

已知限制

  • 系统音频功能仅在 Windows 上可用,且只采集默认输出设备。如果更换了默认输出设备,需要重新在菜单中选择一次。
  • 当对话正文栏可用宽度 ≤ 900px 时,DSH 原生会隐藏整条导航条,插件也随之不显示。
  • 单轮会话(items.length < 2)没有导航条,因此不会有频谱。
  • 对未加载轮次的识别依赖 DSH 导航条按钮的 aria-label 文案(中英文),其它语言下可能会退化成「已加载」的样式。
  • 插件依赖 DSH 自带导航条的 DOM 结构(button[data-index] + ::before),DSH 大版本升级时可能会失效。
  • 本地助手端口 45999–46010 没有鉴权,仅绑定 127.0.0.1。同一台机器上的其它程序理论上可以读取系统音频。

隐私说明

  • 只有在你显式选择设备后,插件才会开始采集。
  • 关闭「频谱」选项会立即停止采集并释放设备。
  • 音频数据不落盘、不上传,只在页面内存中做 FFT 计算。

卸载

dsh plugin --profile <profile> remove dsh-spectrum-rail

或在插件管理页停用/移除。移除后导航条会恢复原样,插件注入的样式会被清理。

开发与编译

项目源码包含以下主要部分:

  • client.js:浏览器端,负责绘制、音频处理与菜单逻辑。
  • index.js:Host 端,负责启动与守护本地助手进程。
  • native/LoopbackCapture.cs:WASAPI 回环实现与本地 HTTP 服务。
  • native/build.ps1:用于重新编译 loopback-capture.exe 的 PowerShell 脚本。

如果需要自行编译本地助手,可以在项目根目录执行:

powershell -ExecutionPolicy Bypass -File native/build.ps1

适用场景与注意事项

dsh-spectrum-rail 适合希望在 DSH 对话中通过视觉反馈来「看到」当前正在播放声音的开发者或使用者,比如在调试音频应用、演示语音交互效果时。它对 DSH 原生交互的改动很小,因此兼容性较好,但仍需注意上述已知限制。

插件以当前 DSH 进程的权限运行,安装前建议查看源码与许可证(MIT)。如果你在非 Windows 平台使用,或者对本地端口的安全有顾虑,可以优先使用麦克风或虚拟声卡作为输入源。

结语

dsh-spectrum-rail 把 DSH 原本静态的轮次导航条变成了一条动态的音频频谱,在不改变交互的前提下增加了视觉反馈。如果你经常在 DSH 里调试音频或语音相关功能,这条频谱可以让你更直观地看到声音在导航条上的表现。

插件目录页:https://www.skillhub.cn/plugins/Microqian2th/dsh-spectrum-rail
GitHub 仓库:https://github.com/Microqian2th/dsh-spectrum-rail

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

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

Xiaoye