yuanyiHY/dsh-rail-equalizer ↗★ 0

dsh-rail-equalizer

让 DSH 的「轮次导航」导轨跟着系统正在播放的声音实时律动(Windows)。宿主端走 WASAPI 回环采集,零授权、不弹窗、不碰麦克风;浏览器端只注入 CSS 变量,不改动官方组件,关闭后完全恢复默认样式。 仅限Windows用户,适合追求个性化视觉动效和律动反馈的用户。

パッケージ
dsh-rail-equalizer
互換性
未検証
Harness ピア範囲
^0.1.5-rc.1
Cordis ピア範囲
^4.0.2
バージョン
0.1.0
ライセンス
MIT
最終更新
2026/09/16

インストール

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:yuanyiHY/dsh-rail-equalizer

ドキュメント

README 全文を読む ↗

使用

侧栏里、官方「工作区」区块正上方会出现一行:

┌──────────────────────┐
│ ♪  律动        [ ⬤ ] │   ← 点整行(开关以外)展开 / 收起设置面板
└──────────────────────┘      点右侧开关 → 直接开 / 关

这一行是插进侧栏文档流的(insertBefore 到 [class*="_regionArea"] 之前), 用和生态里其它插件(如技能中心)一样的做法,并带自愈:React 重渲染把它挤掉就重新插回去。

为什么不注册进官方插槽? 侧栏唯一位置合适的 sidebar.workspaces 是 kind: "single" —— 往里注册会顶掉官方的工作区区块。而侧栏其余插槽(sidebar.settings / sidebar.brand.*)也都是 single。 所以只能插 DOM,这也是其它侧栏插件共同的做法。

为什么不用浮层(position: fixed)? 试过,不行 —— 浮层会盖住同样插在这一区域的 其它插件(技能中心那一行就是这么被盖没的)。插进文档流后各占各的位置,谁都不挡谁。

也没有单独的齿轮按钮了 —— 免得和 DSH 自己的设置齿轮撞脸。设置面板只在展开时出现, 定位到这一行的右侧(--dsh-eq-pill-x/y 由 JS 实测写入)。

设置面板里:

项目说明
总开关关掉后导轨完全恢复默认样式(样式表被移除,不是"置零")
运动方式四选一,即时生效,见下表
灵敏度0.4–3.0。系统音量小、音乐本身轻的时候往上调
强度0.2–2.0。整体变形幅度
低频冲击0–2.0。鼓点让刻度纵向"砸"下去多少
行波只在「行波」模式下有意义:关掉则波浪不跑,刻度原地起伏
波速行波周期,0.46×–2.4×(滑杆值 2600–500ms)

四种运动方式

用现有的 N 根刻度当素材,四种完全不同的运动模型:

方式观感驱动量
频谱(默认)每根刻度长度 = 它负责的那段频率,低音→高音依次排开,像音乐播放器的频谱条--dsh-eq-v(该刻度分到的频段)
脉动所有刻度同相位,整排一起伸缩呼吸,最"齐"--dsh-eq-lvl + 全局动画相位
摆动刻度本身不变形,整条导轨左右往复摆动--dsh-eq-sw × 电平
行波每根刻度错开相位,一条波沿轨道向上跑--dsh-eq-lvl + 每刻度相位

频谱模式是唯一的"真频谱":宿主端跑 2048 点 FFT + Hann 窗,把 40Hz→16kHz 按对数切成 16 段(和听感一致),客户端再按实际刻度数把 16 段均匀铺到 N 根刻度上 —— 所以 5 根刻度也能看到从低到高的完整分布,50 根刻度就是一根根连续的频谱。

客户端会热重载、宿主不会,所以可能出现「客户端新版 / 宿主旧版」。此时没有频段数据,频谱模式会自动降级成整排一起动,而不是完全不动。自检里的 bandsAvailable 会告诉你当前是哪种。

面板底部有实时电平条和后端状态(设备格式 / 连接状态 / 出错原因)。设置存在浏览器 localStorage(键 dsh-rail-eq:settings:v1)。