Bundle
dsh-piano
滑动钢琴:在 DSH 界面里弹一条钢琴键盘,鼠标/触控板滑过去像刮奏(glissando)一样出声。
- Source
- 439436269-ctrl
- License
- MIT
- Updated
- Updated 2 days ago
Readme
# dsh-piano · 滑动钢琴 在 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` | ## 安装 ```sh dsh plugin --profile desktop add dsh-piano ``` 装好后左下角出现 🎹 按钮(包名会进 `dsh.profile.bundles`,实测热载入,一般不用重启;没生效就刷新页面)。 本包是「双面」的(`dsh.bundle.patch` + `dsh.client`):Loader 行拉起空的 Host 半,浏览器半通过 `exports["./client"]` 到达。 ### 本地开发安装 ```sh # 以 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" ``` ## 开发 ```sh npm test # node test/bundle-check.mjs —— 断言 bundle 结构与关键 marker ``` 客户端 bundle 用 `link:` 目录依赖时,改完浏览器刷新即生效;服务端半改动需重启 Host。 ## 说明 - 首次出声需要一次用户手势(点开按钮或按下琴键即自动解锁 AudioContext)。 - 浏览器无 `AudioContext`(极老环境)时静默不发声。
Install
dsh plugin --profile web add github:439436269-ctrl/dsh-piano
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install dsh-piano from the hub
- This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.