drewmerc302/valeton-gp50
GitHub: drewmerc302/valeton-gp50
基于逆向工程 MIDI SysEx 协议的纯浏览器端 Valeton GP-50/GP-5 效果器预设编辑器,支持通过 WebMIDI 实时读写和管理设备音色。
Stars: 2 | Forks: 0
# Valeton GP-50 编辑器
这是一款基于浏览器的 **Valeton GP-50**(以及 GP-5)编辑器,通过从零开始
逆向工程解码设备的 MIDI SysEx 协议构建。它通过
**WebMIDI** 实时读写设备 —— 无需厂商 SDK,无需驱动,无需后端。
**在线演示:** [valeton-gp50-woad.vercel.app](https://valeton-gp50-woad.vercel.app) ——
零配置,完全在浏览器中运行。支持 Chrome 或 Edge,踏板通过 USB 连接。
**功能简介:**
- **Preset 浏览器** —— 读取已连接踏板上的所有 preset;展示每个 preset 的完整信号链,
区块标签根据类型以颜色区分。
- **实时编辑** —— 在浏览器中编辑 preset 的区块、模型和参数;
修改会通过 WebMIDI 直接同步到踏板。
- **模型选择器** —— 使用 Valeton 官方硬件名称替换任何区块的模型,
而不仅仅是内部 ID。
- **重命名 Preset** —— 编辑 preset 的名称并将其写回设备。
- **Preset 与区块重排** —— 拖动以重新排列 bank 中的 preset,或
preset 信号链中的区块;每次重排都是一次批量且最小化的写入操作。
- **清除 Preset** —— 将某个槽位重置为出厂空白 preset。
- **Captures 与 IRs 浏览器** —— 展示设备上的所有 SnapTone capture 和用户 IR,
以及可复用的模板。
- **Capture 使用情况查询** —— 选择一个 SnapTone 或 IR,准确查看哪些 preset
引用了它。
- **基于 Capture 构建 Patch** —— 将模板的效果链封装在
SnapTone/IR 外围,并将结果写入槽位。
- **从 Preset 创建模板** —— 将任何 preset 的效果链保存为
可复用的模板。
- **Preset 转换器** —— 在客户端完全实现 GP-5 和 GP-50 格式之间的
`.prst` preset 文件转换。
以上所有功能均在客户端运行。在线演示即为完整应用;本地 FastAPI
服务器([设置](#setup))仅用于开发和仓库内旧版的 NAM
转换器。
## 将 NAM captures 导入踏板
**该功能已迁移至独立项目:
[nam-a2a1-converter](https://github.com/drewmerc302/nam-a2a1-converter)** —— 一款独立的
桌面应用(支持 Windows / macOS / Linux,可选 NVIDIA 加速)。
**[下载发布版 →](https://github.com/drewmerc302/nam-a2a1-converter/releases)**
GP-50 仅支持 NAM **A1**,且无法进行 A2 到 A1 的格式降级 —— 它们属于
不同的神经网络架构,因此权重无法直接转移。该转换器采用的是**蒸馏**(distill)方式:
通过 A2 模型渲染一段 DI(直录信号),然后训练一个 A1 模型来重现该输出。
它不依赖于特定设备,因此可为任何仅支持 A1 的设备或插件提供服务,不仅限于 GP-50。
本仓库仍然保留了该引擎的前身(`a2a1/`,已接入本地应用中),
但你实际需要使用的是独立的转换器。
## 截图
| | |
| --- | --- |
|  **Preset 浏览器** — 展示踏板上的每个 preset,区块标签根据类型以颜色区分。 |  **Preset 详情** — 完整信号链,区块参数,实时直接同步到踏板。 |
|  **模型选择器** — 替换区块模型,包含官方硬件名称。 |  **Captures 与 IRs** — 已保存的模板以及设备上的每一个 SnapTone capture。 |
|  **Capture 使用情况** — 准确查看哪些 patch 引用了该 SnapTone。 |  **构建 Patch** — 将模板封装在 SnapTone 外围并写入槽位。 |
|  **创建模板** — 将任何 preset 的效果链保存为可复用的封装。 |  **Preset 转换器** — 在 GP-5 和 GP-50 之间转换 `.prst` preset。 |
## 设置
使用该应用无需进行以下任何操作 —— 直接打开
[在线演示](https://valeton-gp50-woad.vercel.app)即可。本地设置仅供开发使用。
```
cd /Users/drewmerc/workspace/valeton
# web app venv
python3 -m venv .venv-app && ./.venv-app/bin/python -m pip install fastapi "uvicorn[standard]" python-multipart pytest httpx
```
## 运行
```
./run.sh
```
然后打开 **http://127.0.0.1:8756**。
- **Preset 浏览器 / Captures 与 IRs:** 通过 WebMIDI 连接踏板(Chrome/Edge,
HTTPS 或 localhost),扫描,并实时浏览/编辑真实设备数据 —— 请参阅
上方列出的各项功能。
- **Preset 转换器:** 拖入一个 `.prst` 文件,在 GP-5 和 GP-50 格式之间进行转换。
- **NAM 转换器:** 仅存在于本地构建版本中,且需要配置上述引擎的 venv。
托管版本改为链接到独立的转换器。
## 测试
```
./.venv-app/bin/python -m pytest app/tests -q -m "not slow" # fast unit/API/frontend suite
./.venv-app/bin/python -m pytest app/tests/test_e2e.py -q -s # slow: real headless browser conversion + screenshots
```
## 目录结构
- `app/` —— FastAPI Web 应用 + WebMIDI 前端(设备 I/O、解码器、编辑器 UI)。
- `a2a1/` —— GP-50 MIDI 逆向工程工具,以及原始的 A2 到 A1 引擎
([README](a2a1/README.md));最终发布的转换器现存放于
[nam-a2a1-converter](https://github.com/drewmerc302/nam-a2a1-converter)。
- `docs/`、`re/`、`design/` —— 协议说明、逆向工程 captures 及格式研究。
- `refs/` —— 示例模型 + DI 输入。
- `MVP_REQUIREMENTS.md`、`AUTONOMY.md`、`STATUS.md` —— MVP 规范、构建循环
协议以及实时构建状态。
## 许可证
[MIT](LICENSE)
## 适用范围
设备的实时读写(浏览器、实时编辑、重排、重命名、清除、capture 使用情况查询、
构建/创建模板)均通过逆向工程实现,并可在 WebMIDI 上正常运行。仅当你通过
浏览器或 Captures 与 IRs 页面显式连接并扫描/写入时,应用才会与物理踏板通信。
可选:仓库内的 NAM 引擎(已被 nam-a2a1-converter 取代)
``` # engine venv (A2 render + train + 0.7.0 export;0.5.x 通过 in-process transcode) python3 -m venv .venv && ./.venv/bin/python -m pip install -r a2a1/requirements-a2.txt # NAM 0.13.0 ``` 只需一个 venv,而不是两个 —— 请参阅 [`a2a1/README.md`](a2a1/README.md) 了解为何移除了 旧的第二个 venv。默认的 DI 是 `refs/v3_0_0.wav`(官方 NAM 输入)。可以通过 trainer 获取,或者生成一个合成的备用版本: `./.venv/bin/python a2a1/make_di.py refs/v3_0_0.wav`。标签:SysEx协议, WebMIDI, 前端工具, 数据可视化, 硬件控制, 逆向工具, 音乐设备控制