UI Enhancements

dsh-piano

439436269-ctrl/dsh-piano · ★ 0

439436269-ctrl

滑动钢琴:在 DSH 界面里弹一条钢琴键盘,鼠标/触控板滑过去像刮奏(glissando)一样出声。

An English summary is not available; the Chinese summary is shown.

README body is shown in Chinese.

License
MIT
Added
2026-10-30
Maintenance
active
Install kind
github
Manifest status
Declared
Manifest path
package.json#dsh
Manifest checked
2026-10-30T09:38:05.350Z
Lifecycle scripts
None found

Static manifest checks report declarations only; they are not compatibility or security review.

安装

dsh plugin --profile web add 'github:439436269-ctrl/dsh-piano#6d04df38659655b3c71136bfe0172d0d14439d64'

GitHub 源码安装:首次需按提示配置 allowBuilds 构建授权后重试

For install and environment setup, plus plugin development tutorials, see DSH community docs ↗

README

Source README · body: zh · Read Chinese README

Table of contents
  1. 效果
  2. 技术要点
  3. 安装
  4. 本地开发安装
  5. 开发
  6. 说明

在 DSH 界面里弹一条钢琴键盘:点单个键出声,按住鼠标 / 触控板横向滑动会像刮奏(glissando)一样连续发声。声音用 Web Audio 实时合成,零采样、零网络、零第三方依赖。

效果

  • 左下角一枚 🎹 按钮(默认收起,不打扰正常使用)。按钮可拖动:按住移动超过 6px 即判定为拖(不会误开面板),松手后位置存 localStorage,下次进来仍在原处;400ms 内的 click 才算"点开",拖动不会吞掉下一次真正点击。
  • 点开是底部居中的浮动键盘面板:音量滑块、八度移调(− / +)、收起。
  • 键盘含白键 + 黑键;按住后滑动,指到哪个键就响哪个音(按住拖动 = 刮奏)。
  • 设置(音量、起始八度)持久化到 localStorage,刷新后保留。

技术要点

项 做法
挂载槽位 shell.overlay(常驻应用面座位)
音频 Web Audio 合成:基音 + 泛音(指数衰减)+ 高通噪声锤击瞬态 + 低通 + 压缩器防削波
刮奏 指针按下 setPointerCapture → pointermove 用 document.elementFromPoint 命中 data-midi 键 → 键变化即触发新音
客户端形态 手写 window.__ModuleLoader__.load 零构建 bundle,platform: web

安装

dsh plugin --profile desktop add dsh-piano

装好后左下角出现 🎹 按钮(包名会进 dsh.profile.bundles,实测热载入,一般不用重启;没生效就刷新页面)。

本包是「双面」的(dsh.bundle.patch + dsh.client):Loader 行拉起空的 Host 半,浏览器半通过 exports["./client"] 到达。

本地开发安装

# 以 file:/link: 目录依赖装进 profile,并加入 bundles(或 cordis insert)
dsh plugin --profile desktop add /path/to/dsh-piano -w
# 或手写:profile/package.json 加 "dsh-piano": "link:...", 并在 dsh.profile.bundles 加 "dsh-piano"

开发

npm test          # node test/bundle-check.mjs —— 断言 bundle 结构与关键 marker

客户端 bundle 用 link: 目录依赖时,改完浏览器刷新即生效;服务端半改动需重启 Host。

说明

  • 首次出声需要一次用户手势(点开按钮或按下琴键即自动解锁 AudioContext)。
  • 浏览器无 AudioContext(极老环境)时静默不发声。